我和swift 3一起为osx工作。
我有这个日历:
这个日历应该显示实际日期加上14天。
一般来说是正确的,因为30-16=14天之间。
这是我的代码:
datePicker.dateValue = Calendar.current.date(byAdding: .day, value: 14, to: Date())!
但是在我日历的底部应该可以看到从现在到选定日期之间的日期。但这里将显示13天。
为什么是13而不是14?
此文本标签的计算方式如下:
txtDiffDays.stringValue = "(\(Calendar.current.dateComponents([.day], from: Date(), to: datePicker.dateValue).day!) Tage)"
我的错误在哪里?
最佳答案
let now = Date()
let date = Calendar.current.date(byAdding: .day, value: 14, to: Date())!
let nowDay = Calendar.current.dateComponents([.day], from: Date()).day
let dateDay = Calendar.current.dateComponents([.day], from: date).day
date.timeIntervalSince1970 - Date().timeIntervalSince1970
date.timeIntervalSince1970 - now.timeIntervalSince1970
let days = Calendar.current.dateComponents([.day], from: Date().addingTimeInterval(-1), to: date).day!
let days2 = Calendar.current.dateComponents([.day], from: now, to: date).day!
基于这个结果,我认为在“设置日期选择器的值”和“计算日期差”之间已经过了一段时间。在这两个动作中,你都做了
Date()
。因为一段时间过去了,他第二次创建的日期比第一次调用创建的日期稍晚一点,从操场上的第8行和第9行可以看到。由于第二个日期稍晚,这使得日期差小于14整天,所以
Date()
方法将其舍入,得到13。要解决这个问题,请避免打两个
Date()
电话。您可以创建一个名为dateComponents
的局部变量,并在整个方法中使用它。let now = Date()
或者,你可以像我在操场10号线那样使用
Date()
,但我觉得这是一个欺骗而不是解决方案。