swift - 快速计算两个日期之间的天数
问题描述
为什么在计算两个日期之间的天数时使用变量 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
解决方案
它与您创建变量并比较它们的顺序有关。
您要做的第一件事是创建today
. 然后,你创建twoWeeksFromNow
一个新Date()
的,在未来会比以前稍微today
远一些。在我的机器上,在操场上,第二个日期比第一个日期晚大约 300 微秒。
然后,对于numDaysWithDate
,您将twoWeeksFromNow
与另一个新的比较Date()
,甚至更多。因此,您的时间框架略少于 2 周,给您 13 天。
但是,对于numDaysWithToday
,您将其与之前创建twoWeeksFromNow
的原始进行比较,使其略长于 2 周,给您 14 天。today
twoWeeksFromNow
如果你改变today
andtwoWeeksFromNow
声明的顺序,你会看到不同的结果:
var twoWeeksFromNow: Date = Calendar.current.date(byAdding: .day,
value: 14, to: Date())!
var today = Date()
现在,因为today
创建时间稍晚于twoWeeksFromNow
创建日期,所以两个结果都是 13。
推荐阅读
- kubernetes - Kubernetes暴露一个服务不分配外部ip
- kubernetes - 无法使用 DNS 为 kubernetes 中的服务从另一服务调用一项服务
- ruby-on-rails - Ruby on Rails create_table(SQlite3 与 PostgreSQL)
- json - 使用 rxjs 获取带有数组的 http 请求
- r - Filter_time 函数 - 在 R 中过滤时间
- swift - 如何防止子托管对象上下文停止应用程序?
- java - RxJava。Observable.OnSubscribe 无法解析为类型
- css - Box in box - 修复内框底部边框和底部边框之间的空间 -
- javascript - 循环和显示来自 2 个单独数组 Angular 4 的数据
- python - http://127.0.0.1:5000/post/0 不工作