假设 endDate 比 startDate 晚不到 24 小时,您可以使用以下函数来确定两个日期之间经过的时间(以小时和分钟为单位)。
您可以使用Date.timeIntervalSince(_ date:) 来确定两个Date 对象之间的秒数差异,然后您可以轻松地将差异转换为更易于阅读的格式,指定经过的小时/分钟。
func timeElapsed(from startDate:Date,to endDate:Date)->DateComponents{
let secondsElapsed = Int(endDate.timeIntervalSince(startDate))
let minutes = (secondsElapsed%3600)/60
let hours = secondsElapsed/3600
return DateComponents(hour: hours, minute: minutes)
}
当日期/月份不同时,上述功能也可以正常工作。
一些测试数据:
timeElapsed(from: Calendar.current.date(from: DateComponents(day: 1, hour: 18, minute: 0))!, to: Calendar.current.date(from: DateComponents(day: 2, hour: 6, minute: 14))!) //hour: 12 minute: 14 isLeapMonth: false
timeElapsed(from: Calendar.current.date(from: DateComponents(day: 1, hour: 20, minute: 46))!, to: Calendar.current.date(from: DateComponents(day: 2, hour: 4, minute: 14))!) //hour: 7 minute: 28 isLeapMonth: false
timeElapsed(from: Calendar.current.date(from: DateComponents(month: 1, day: 31, hour: 20, minute: 0))!, to: Calendar.current.date(from: DateComponents(month: 2, day: 1, hour: 4, minute: 0))!) //hour: 8 minute: 0 isLeapMonth: false
如果您决定将来需要更多,您可以轻松地修改函数以返回更多DateComponents。如果两个日期之间的 24 小时差异可能更大,也可以轻松调整。