在Swift中计算两个日期之间的时差

我已经看到了许多方法,如何根据特定的日期组件(例如,天,小时,月等)来计算两个日期之间的差异

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

}

}

我已经看到了 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

回到顶部