【发布时间】:2018-06-28 05:15:53
【问题描述】:
鉴于我在扩展中添加到 Date 对象的以下方法:
extension Date {
static func -(left: Date, right: Date) -> DateComponents {
let components: Set<Calendar.Component> = [
.year,
.month,
.day,
.hour,
.minute,
.second,
//.weekOfYear, // issue!
]
let gregorian = Calendar(identifier: .gregorian)
let dateComponents = gregorian.dateComponents(components, from: right, to: left)
return dateComponents
}
}
给定以下日期(格式为月日、年、hh:mm:ss),您得到 1:
let day1 = Date(timeIntervalSince1970: 1516003200) // January 15, 2018, 00:00:00
let day2 = Date(timeIntervalSince1970: 1516089600) // January 16, 2018, 00:00:00
let diff = day2 - day1
print(diff.day!) // 1
但给定以下日期,您也会得到 1:
let day3 = Date(timeIntervalSince1970: 1515916800) // January 14, 2018, 00:00:00
let day4 = Date(timeIntervalSince1970: 1516089600) // January 16, 2018, 00:00:00
let diff2 = day4 - day3
print(diff.day!) // 1
所以我的第一个问题是想知道 为什么即使其中一个相隔 1 天而另一个相隔 2 天,日差却相同。
最后,给定以下日期,你得到正确的数字 14:
let day5 = Date(timeIntervalSince1970: 1516089600) // January 16, 2018, 00:00:00
let day6 = Date(timeIntervalSince1970: 1517299200) // January 30, 2018, 00:00:00
let diff3 = day6 - day5
print(diff3.day!)
但是,如果您要返回 static func -(left:right:) 并取消注释 .weekOfYear 并使用 day5 和 day6 重新运行上述代码块,您将获得 0 天。所以我的第二个问题是如果我将 .weekOfYear 组件添加到集合中,为什么我会得到 0 天。
我在下面附上了两张游乐场的截图,第一张不包括.weekOfYear,第二张包括.weekOfYear:
【问题讨论】:
-
第 3 天 - 第 4 天我得到 2 天你打印错误的变量
print(diff.day!),而你应该打印print(diff2.day!) -
我用您的
day3和day4进行了测试,测试了每个时区,在所有时区中,day的差异为 2。
标签: swift date nsdatecomponents