什么是NSCalendar的rangeOfUnit:startDate:interval:forDate真的在做什么?
问题描述:
我将我的一些真正旧代码从Objective C转换为Swift,并且碰到了这个怪物。我无法弄清楚我在这里做了什么。看着那个rangeOfUnit方法的文档,我只剩下我的脑袋了。什么是NSCalendar的rangeOfUnit:startDate:interval:forDate真的在做什么?
看起来好像我只是找出这两个日期之间有多少天,但这似乎是一个奇怪的方式来做到这一点真的。
NSDate *fromDate, *toDate;
[self.calendar rangeOfUnit:NSCalendarUnitDay startDate:&fromDate interval:0 forDate:event.startDate];
[self.calendar rangeOfUnit:NSCalendarUnitDay startDate:&toDate interval:0 forDate:event.endDate];
NSInteger difference = labs([self.calendar components:NSCalendarUnitDay fromDate:fromDate toDate:toDate options:0].day) + 1;
答
方法rangeOfUnit
计算包含给定日期分别意味着午夜日历单元(这里day
)的开始。指针fromDate
和toDate
包含返回的结果。 interval
参数的指针将返回86400,即日历单元的NSTimeInterval
。
NSCalendar
有做要容易得多同样的事情的方法:
NSDate *fromDate = [self.calendar startOfDayForDate:event.startDate];