我有两次想要计算它们之间的分钟差异。它们如下:
startDate = "23:51"
endDate = "00:01"
它们都是String
类型,因为随后没有附加日期。我知道通常的做法是将两者都转换为Date
,然后使用NSCalendar
计算时间差:
extension Date {
func minutes(from date: Date) -> Int {
return Calendar.current.components(.minute, from: date, to: self, options: []).minute ?? 0
}
}
然而,由于天数,月数等未知,因此会产生错误的结果。我该如何做到这一点?
答案 0 :(得分:3)
这是一种在不使用NSDate
的情况下找到差异的基本方法:
let startDate = "23:51"
let endDate = "00:01"
let startArray = startDate.componentsSeparatedByString(":") // ["23", "51"]
let endArray = endDate.componentsSeparatedByString(":") // ["00", "01"]
let startHours = Int(startArray[0])! * 60 // 1380
let startMinutes = Int(startArray[1])! + startHours // 1431
let endHours = Int(endArray[0])! * 60 // 0
let endMinutes = Int(endArray[1])! + endHours // 1
var timeDifference = endMinutes - startMinutes // -1430
let day = 24 * 60 // 1440
if timeDifference < 0 {
timeDifference += day // 10
}
最后timeDifference
等于10
。
此功能假定结束日期将在开始日期之后发生,无论如何。因此,如果结束日期是开始日期之前的时间,则将添加1440分钟(1天)。它还假设日期的格式为&#34; hh:mm&#34;小时范围从0到24,分钟范围从0到60。