SwiftDate 和日期计算

标签 swift swiftdate

我正在尝试计算宠物存活的周数和天数。我正在为此使用 SwiftDate。所以我让用户选择生日并将其与当前日期进行比较。

我不想比较时间...所以生日和当前日期应该是同一时间。

我的代码是:

let greg = Calendar(identifier: .gregorian)
var date1 = birthday // from datepicker
var date2 = Date()
var components1 = greg.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date1)
var components2 = greg.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date2)
components1.hour = 15
components1.minute = 0
components1.second = 0
components2.hour = 15
components2.minute = 0
components2.second = 0
date1 = greg.date(from: components1)!
date2 = greg.date(from: components2)!

let daysAlive = (date2 - date1).in(.day)
let weeksAlive = Int(weeksAlive! / 7)
let restDays = daysAlive! - (weeksAlive * 7)
let aLive = "Age: \(weeksAlive) wk, \(restDays) d (\(daysAlive!) d)"

输出是“年龄:28周,3天(199天)”

代码有效……但我该如何重构它?是否有更简单的方法来为两个给定日期设置“同一时间”?

最佳答案

要忽略时间,只需省略 .hour.minute.second 的组件即可

let components1 = greg.dateComponents([.year, .month, .day], from: date1)
let components2 = greg.dateComponents([.year, .month, .day], from: date2)

date1 = greg.date(from: components1)!
date2 = greg.date(from: components2)!

这是一个没有任何第三方库的更简单的解决方案。它使用 Calendar 方法 dateComponents( :from:to:。不需要额外的数学运算。

let greg = Calendar(identifier: .gregorian)
var date1 = greg.date(from: DateComponents(year: 2017, month: 6, day: 25))!
var date2 = Date()
var components1 = greg.dateComponents([.year, .month, .day], from: date1)
var components2 = greg.dateComponents([.year, .month, .day], from: date2)

let weeksAndDays = greg.dateComponents([.weekOfMonth, .day], from: components1, to: components2)
let justDays = greg.dateComponents([.day], from: components1, to: components2)

let aLive = "Age: \(weeksAndDays.weekOfMonth!) wk, \(weeksAndDays.day!) d (\(justDays.day!) d)"
// "Age: 28 wk, 3 d (199 d)"

关于SwiftDate 和日期计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48196304/

相关文章:

ios - 使用 swift 后丢弃 View

date - 使用 SwiftDate 的日期之间的小时数

ios - SwiftDate - 迄今为止的字符串

ios - SwiftDate 5.0 编译问题

ios - Swift 字符串转换为 SwiftDate

ios - 从 SKNode 中删除特定的 SKAction 列表

swift - 使用 Swift 枚举的二叉树实现

ios - 使用数组指针和 swift 1.2 进行 PFSubclassing - fatal error : NSArray element failed to match the Swift Array Element type

ios - 如何将 scrollView 中的图像发送到 "detailViewController"?

ios - 如何使用SwiftDate框架打印当前时区中的日期和时间(本地化)