ios - 在没有日期的情况下计算两次之间的分钟数

标签 ios iphone swift ipad

我有两次想计算它们之间的分钟差。它们如下:

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/

相关文章:

ios - Safari 服务崩溃 [SFAuthenticationViewController dismissViewControllerAnimated :completion:]

ios - 从纵向模式切换到横向模式时重新排序 View (iOS Xcode swift)

iphone - 无法在 UI Web View 中打开 iTunes 链接

arrays - 使用 Parse 在 PFQuery 之外返回空数组的数组

ios - 应用提交 : Invalid Binary - Invalid Signature

iphone - 我可以在给定时间仅播放任何缓冲区一次吗?

iphone - 当 modalPresentationStyle 设置为 UIModalPresentationCurrentContext 时没有动画

ios - Swift 2.0 中的“advancedBy”API

swift - 什么是展开变量?

ios - 使用 AVPlayer 在 UIView 中播放延时