首页 > 解决方案 > 快速计算两个日期之间的天数

问题描述

为什么在计算两个日期之间的天数时使用变量 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: Date(), to: 
twoWeeksFromNow).day!
var numDaysWithToday: Int = 
Calendar.current.dateComponents([.day], from: today, to: 
twoWeeksFromNow).day!

print(numDaysWithDate) // 13
print(numDaysWithToday) // 14

标签: swiftdatevariables

解决方案


它与您创建变量并比较它们的顺序有关。

您要做的第一件事是创建today. 然后,你创建twoWeeksFromNow一个新Date()的,在未来会比以前稍微today远一些。在我的机器上,在操场上,第二个日期比第一个日期晚大约 300 微秒。

然后,对于numDaysWithDate,您将twoWeeksFromNow另一个新的比较Date(),甚至更多。因此,您的时间框架少于 2 周,给您 13 天。

但是,对于numDaysWithToday,您将其与之前创建twoWeeksFromNow的原始进行比较,使其略长于 2 周,给您 14 天。today twoWeeksFromNow

如果你改变todayandtwoWeeksFromNow声明的顺序,你会看到不同的结果:

var twoWeeksFromNow: Date = Calendar.current.date(byAdding: .day,
value: 14, to: Date())!
var today = Date()

现在,因为today创建时间稍晚于twoWeeksFromNow创建日期,所以两个结果都是 13。


推荐阅读