实际日期加14天

时间:2017-08-16 14:22:52

标签: swift macos cocoa datepicker

我使用swift 3 for osx。 我有这个日历:

enter image description here

此日历应显示实际日期加上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)"

我的错误在哪里?

2 个答案:

答案 0 :(得分:2)

问题在于您要拨打Date()两次。

计算差异时,from date必须与设置datePicker时使用的完全相同。否则会稍晚一些,天数不到14天。

答案 1 :(得分:1)

以下是我在操场上做的一些实验:

enter image description here

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()。由于已经过了一段时间,他第二次Date()创建的日期比第一次Date()调用创建的日期稍晚一点,正如您可以在操场上的第8行和第9行看到的那样。

由于第二个日期稍晚,这使得日期差异少于14天,因此dateComponents方法将其舍入并且得到13。

要解决此问题,请避免进行两次Date()次呼叫。您可以创建一个名为now的局部变量,并在整个方法中使用它。

let now = Date()

或者,你可以像我在游乐场10号线那样使用Date().addingTimeInterval(-1),但我觉得这不仅仅是一个骗局。