什么是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)的开始。指针fromDatetoDate包含返回的结果。 interval参数的指针将返回86400,即日历单元的NSTimeInterval

NSCalendar有做要容易得多同样的事情的方法:

NSDate *fromDate = [self.calendar startOfDayForDate:event.startDate];