【发布时间】:2018-11-29 16:44:37
【问题描述】:
我已经看到了许多方法如何根据特定日期组件计算两个日期之间的差异,例如以天、小时、月等为单位(参见this answer on Stackoverflow):
Calendar.current.dateComponents([.hour], from: fromDate, to: toDate).hour
Calendar.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
}
}
我已经看到了 DateInterval 类型,它是在 iOS 10 中引入的,但根据文档
[it] 不支持反向间隔,即持续时间小于 0 且结束日期早于开始日期的时间间隔。
这使得用日期计算本来就很困难——尤其是当您不知道哪个是较早的日期时。
是否有任何简洁的方法可以直接计算Dates 之间的时间差(并将它们再次添加到Date 实例中)不用他们的timeIntervalSinceReferenceDate 计算?
【问题讨论】:
-
Apple Documentation 描述了一个比较函数,它将为您排序日期,以便您进行评估。
-
timeIntervalSinceReferenceDate有什么问题? -
@Jake:当然我可以比较日期,但我无法计算两个日期之间的时间间隔,然后我可以将其添加到另一个日期。我在我的问题中包含的功能只是我编造的一个示例,以展示它的一些应用,诚然,这是一个非常简单的功能,可以以更好的方式实现。但这不是问题。问题是如何使用直观的语法轻松计算日期差异。
-
@AndréSlotta:问题在于它使代码的可读性、美观性和直观性降低:
toDate - fromDate比toDate.timeIntervalSinceReferenceDate - fromDate.timeIntervalSinceReferenceDate更易于阅读。 -
另外,我不清楚为什么 Swift 不允许我直接减去两个日期。
标签: ios swift date dateinterval