在swift中计算两个日期之间的天数
为什么在计算两个日期之间的天数时使用变量today而不是Date()的结果会对swift产生影响在swift中计算两个日期之间的天数,swift,date,variables,Swift,Date,Variables,为什么在计算两个日期之间的天数时使用变量today而不是Date()的结果会对swift产生影响 var numDays: Int var today = Date() var twoWeeksFromNow: Date = Calendar.current.date(byAdding: .day, value: 14, to: Date())! var numDaysWithDate: Int = Calendar.current.dateComponents([.day], from:
var numDays: Int
var today = Date()
var twoWeeksFromNow: Date = Calendar.current.date(byAdding: .day,
value: 14, to: Date())!
var numDaysWithDate: Int =
Calendar.current.dateComponents([.day], from: Date(), to:
twoWeeksFromNow).day!
var numDaysWithToday: Int =
Calendar.current.dateComponents([.day], from: today, to:
twoWeeksFromNow).day!
print(numDaysWithDate) // 13
print(numDaysWithToday) // 14
这与创建变量和比较变量的顺序有关 您要做的第一件事就是今天创建
。然后,基于一个新的日期()
,从现在开始创建twoWeeksFromNow
,该日期在未来将比今天的稍微远一点。在我的机器上,在操场上,第二次约会比第一次要晚300微秒
然后,对于numDaysWithDate
,您将从现在开始的两周
与另一个新的Date()
进行比较,甚至在将来更轻微。所以,你的时间范围是非常略少于2个完整的星期,给你13天
但是,对于今天的numDaysWithToday
,您将TwoweekFromNow
与原始的today
进行比较,原始的TwoweekFromNow
是在TwoweekFromNow
之前创建的,使其略长于2周,给您14天的时间
若您更改了today
和twoWeeksFromNow
声明的顺序,您可以看到不同的结果:
var twoWeeksFromNow: Date = Calendar.current.date(byAdding: .day,
value: 14, to: Date())!
var today = Date()
现在,因为今天创建的比创建TwoweekFromNow
的日期稍晚,所以两个结果都是13。这与创建变量和比较变量的顺序有关
您要做的第一件事就是今天创建
。然后,基于一个新的日期()
,从现在开始创建twoWeeksFromNow
,该日期在未来将比今天的稍微远一点。在我的机器上,在操场上,第二次约会比第一次要晚300微秒
然后,对于numDaysWithDate
,您将从现在开始的两周
与另一个新的Date()
进行比较,甚至在将来更轻微。所以,你的时间范围是非常略少于2个完整的星期,给你13天
但是,对于今天的numDaysWithToday
,您将TwoweekFromNow
与原始的today
进行比较,原始的TwoweekFromNow
是在TwoweekFromNow
之前创建的,使其略长于2周,给您14天的时间
若您更改了today
和twoWeeksFromNow
声明的顺序,您可以看到不同的结果:
var twoWeeksFromNow: Date = Calendar.current.date(byAdding: .day,
value: 14, to: Date())!
var today = Date()
现在,由于今天
的创建日期略晚于TwoweekFromNow
创建日期,因此两个结果都是13。要理解的关键问题可以归结为这一点。以下代码:
var today = Date()
print("Woof")
print(Date().timeIntervalSinceReferenceDate - today.timeIntervalSinceReferenceDate )
记录大于0的值。在我的机器上,它显示的值为0.00047898292541503906
这是因为第二个Date()
的值是在捕获今天的之后捕获的。通过添加一个print语句,可以使代码速度减慢到两个值之间的间隔超过4毫秒。通过删除print语句,两个Date()值之间的间隔小于2毫秒
如果您进行一系列日历/日期计算,每次都取一个新值Date()
,则新的Date
将比您在代码开头捕获的“今日”值晚一小部分秒。正如@jnpdx在其出色的答案中所解释的那样,这一差异足以抵消您的天数计算。(投票)理解的关键可以归结为以下几点。以下代码:
var today = Date()
print("Woof")
print(Date().timeIntervalSinceReferenceDate - today.timeIntervalSinceReferenceDate )
记录大于0的值。在我的机器上,它显示的值为0.00047898292541503906
这是因为第二个Date()
的值是在捕获今天的之后捕获的。通过添加一个print语句,可以使代码速度减慢到两个值之间的间隔超过4毫秒。通过删除print语句,两个Date()值之间的间隔小于2毫秒
如果您进行一系列日历/日期计算,每次都取一个新值Date()
,则新的Date
将比您在代码开头捕获的“今日”值晚一小部分秒。正如@jnpdx在其出色的答案中所解释的那样,这一差异足以抵消您的天数计算。(投票)不要发布代码的图片。在代码中编辑您的问题和过去。然后选择它并点击代码标签按钮({}
)对其进行代码格式化。我的b,我将更改它不发布代码图片。在代码中编辑您的问题和过去。然后选择它并点击代码标签按钮({}
)对其进行代码格式化。我的b,我将更改它