iOS的NSCalendar可以计算两个日期之间相隔的天数,代码如下:
- (NSInteger)daysFromDate:(NSDate *)startDate toDate:(NSDate *)endDate{ NSLog(@"start:%@", startDate); NSLog(@"end:%@", endDate); NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; unsigned int unitFlags = NSDayCalendarUnit; NSDateComponents *comps = [gregorian components:unitFlags fromDate:startDate toDate:endDate options:0]; NSLog(@"day:%d", [comps day]); return [comps day]; }
但这样得到的结果有时会出现下面的现象,
start:2014-01-19 04:15:22 +0000
end:2014-01-20 04:15:22 +0000
day:1
start:2014-01-19 04:15:44 +0000
end:2014-01-21 04:15:33 +0000
day:1
在stackoverflow上找到了一个可行的方法,经稍微改进,现在可以只计算日期,忽略时间,得到两个日期之间相差多少晚,代码如下:
- (NSInteger)daysFromDate:(NSDate *)startDate toDate:(NSDate *)endDate{
NSDateFormatter *temp = [[NSDateFormatter alloc] init];
[temp setDateFormat:@"yyyy-MM-dd"];
NSDate *stDt = [temp dateFromString:[temp stringFromDate:startDate]];
NSDate *endDt = [temp dateFromString:[temp stringFromDate:endDate]];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:stDt];
stDt = [stDt dateByAddingTimeInterval: interval];
interval = [zone secondsFromGMTForDate:endDt];
endDt = [endDt dateByAddingTimeInterval:interval];
unsigned int unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comps = [self.calendar components:unitFlags fromDate:stDt toDate:endDt options:0];
return [comps day];
}