找出两个日期之间的时间差(以秒为单位)

时间:2019-07-16 17:36:14

标签: swift date nstimeinterval

我有2个约会。我不在乎日期部分,只是时间。

如何比较2个日期并获取2个日期之间的时间间隔?

我应该将日期设置为2000年1月1日,而不用花时间比较吗?

3 个答案:

答案 0 :(得分:0)

使用DateComponents并获取两个日期中的小时,分​​钟和秒。在这一点上,您必须假设一天24小时,每天86400秒。由于您进行的是与日期无关的计算,因此无需担心夏令时或leap秒。

将小时,分钟和秒转换为两个日期一天的总秒数。然后简单地将两个总数相减就可以了。

这是一个有用的日期扩展名:

extension Date {
    func secondsSinceMidnight() -> TimeInterval {
        let comps = Calendar.current.dateComponents([.hour,.minute,.second], from: self)

        return TimeInterval(comps.hour! * 3600 + comps.minute! * 60 + comps.second!)
    }

    func timeDifference(to date: Date) -> TimeInterval {
        return date.secondsSinceMidnight() - self.secondsSinceMidnight()
    }
}

使用您的两个日期致电timeDifference(to:),忽略日期的日期部分,您将获得以秒为单位的差异。

结果为负表示to日期更接近午夜。

答案 1 :(得分:0)

如果您有两个日期,则可以使用timeIntervalSince(Date)方法。

例如:

func calculateElapsedTime(from someTime: Date) -> TimeInterval {

    let currentTime = Date()

    var elapsedTime = currentTime.timeIntervalSince(someTime)

    return elapsedTime

}

如果只想考虑两个日期之间的时差,则必须首先将日期标准化。这可以通过以下繁琐的方式完成:

let currentDate = Date()
let anotherDate = Date(timeInterval: 60, since: currentDate)
let formatter = DateFormatter()

formatter.timeStyle = .short

let currentTime = formatter.string(from: currentDate)
let anotherTime = formatter.string(from: anotherDate)

let currentIntervalTime = formatter.date(from: currentTime)
let anotherIntervalTime = formatter.date(from: anotherTime)

let elapsedTime = anotherIntervalTime?.timeIntervalSince(currentIntervalTime!)

希望这可以解决您的问题。

答案 2 :(得分:0)

这是完全基于DateComponents

的rmaddy解决方案的替代方案
extension Date {
    func timeComponents() -> DateComponents {
        return Calendar.current.dateComponents([.hour,.minute,.second], from: self)
    }

    func timeDifference(to date: Date) -> Int {
        return Calendar.current.dateComponents([.second], from: date.timeComponents(), to: self.timeComponents()).second!
    }
}