首页 > 解决方案 > 日历组件是负数

问题描述

我正在尝试以人类可读格式获取时间间隔,例如 20 分钟前

我从服务器获取如下日期(来自服务器的日期是过去的日期)

"2019-02-06T16:42:41.908Z"

我正在使用以下日期格式化程序

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    let date = dateFormatter.date(from: dateString)

现在,当我尝试使用以下获取日期组件时

let interval = Calendar.current.dateComponents([.year, .month, .day,.hour, .minute], from: serverDate, to: Date())

我得到了负面的分钟数

(lldb) p interval.minute
(Int?) $R2 = -9

请让我知道我在这里做错了什么。任何想法或建议都会很棒。

标签: iosswift

解决方案


您正在使用方法dateComponents(_:from:to:)返回两个日期之间的差异。根据两个日期的顺序,差异可能是负数。

例如:

let interval = Calendar.current.dateComponents([...], from: date1, to: date2)

时将返回负区间date1 > date2

date2isDate()时,即当前日期,负值表示日期在未来。


推荐阅读