在Swift中计算两个日期之间的时差
我已经看到了许多方法,如何根据特定的日期组件(例如,天,小时,月等)来计算两个日期之间的差异
Calendar.current.dateComponents([.hour], from: fromDate, to: toDate).hourCalendar.current.dateComponents([.day], from: fromDate, to: toDate).day
Calendar.current.dateComponents([.month], from: fromDate, to: toDate).month
我还没有看到的是如何使用实际Date对象进行计算。就像是
func computeNewDate(from fromDate: Date, to toDate: Date) -> Date let delta = toDate - fromDate
let today = Date()
if delta < 0 {
return today
} else {
return today + delta
}
}
我已经看到了 iOS 10中引入的类型,但是根据文档DateInterval
[it]不支持反向间隔,即持续时间小于0且结束日期在时间上早于开始日期的间隔。
这样就很难计算日期,尤其是当您不知道哪个是较早的日期时。
是否有任何干净整洁的方法可以直接计算s之间Date的时间差(并将它们Date再次添加到实例中)而无需使用它们进行计算timeIntervalSinceReferenceDate?
回答:
我最终为创建了一个自定义运算符Date:
extension Date { static func - (lhs: Date, rhs: Date) -> TimeInterval {
return lhs.timeIntervalSinceReferenceDate - rhs.timeIntervalSinceReferenceDate
}
}
使用此运算符,我现在可以在更抽象的级别上计算两个日期之间的差,而无需关心timeIntervalSinceReferenceDate或确切地知道参考日期是什么,并且也不会损失精度,
例如:
let delta = toDate - fromDate
显然,我并没有做太多改变,但是对我来说,它更具可读性和结果:Swift +已经为a Date和a 实现了运算符TimeInterval:
/// Returns a `Date` with a specified amount of time added to it.
public static func + (lhs: Date, rhs: TimeInterval) -> Date
So it’s already supporting
Date + TimeInterval = Date
Consequently, it should also support
Date - Date = TimeInterval
我认为,这就是我对-
操作符的简单实现所添加的内容。现在,我可以完全按照问题中的说明编写示例函数:
func computeNewDate(from fromDate: Date, to toDate: Date) -> Date let delta = toDate - fromDate // `Date` - `Date` = `TimeInterval`
let today = Date()
if delta < 0 {
return today
} else {
return today + delta // `Date` + `TimeInterval` = `Date`
}
}
很可能这是我目前尚不了解的一些缺点,我很想听听您对此的想法。
以上是 在Swift中计算两个日期之间的时差 的全部内容, 来源链接: utcz.com/qa/429630.html