如何获得两个日期之间的总月份?这是约会的正常方式
1) 开始日期: 2020-2-22 10:25:00
2) 结束日期: 2020-3-3 12:34:00
let diffInDate:Int = Calendar.current.dateComponents([.month], from: startDate, to: endDate).month!
Run Code Online (Sandbox Code Playgroud)
如果我们按照上面给出的日期进行检查,由于总共不是 30 天,它将返回 0。
现在我想要有一个月差异的结果,如果我们检查上面的日期,它应该返回 1,因为月份发生了变化。那么有什么方法可以检查包括该月在内的日期差异吗?
正如您所正确识别的那样,dateComponents(_:from:to:)不计算小数月份。
然而,还有另一个重载DateComponents,它计算而不是s之间的差异Date。我们可以从 start 和 end 中去掉我们不需要的所有内容(日、小时、分钟等)Date,将它们传递到这个重载中,它应该为我们进行计算。这类似于在减去浮点数之前对其进行舍入,这样您就可以获得它们的整数部分之间的差。
let startDateComponents = Calendar.current.dateComponents([.year, .month], from: startDate)
let endDateComponents = Calendar.current.dateComponents([.year, .month], from: endDate)
let diffInDate = Calendar.current.dateComponents([.month], from: startDateComponents, to: endDateComponents).month!
Run Code Online (Sandbox Code Playgroud)
请注意,我们year还获得了开始日期和结束日期的组成部分,因为计算中也需要年份。但是当我们计算差异时,我们只想要month.