我有两次想计算它们之间的分钟差。它们如下:
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
}
}
然而,这会产生不正确的结果,因为日期、月份等是未知的。我将如何做到这一点?
最佳答案
下面是一个非常基本的方法,可以在不使用 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 天)。它还假定日期的格式为“hh:mm”,其中小时的范围为 0 到 24,分钟的范围为 0 到 60。
关于ios - 在没有日期的情况下计算两次之间的分钟数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599469/