需求
根据两个日期(NSDate),算出它们相差多少天。
解决方法
NSCalendar类提供了计算差值的接口,可以计算两个日期相差多少年月日时分秒等
代码
//创建两个日期
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *startDate = [dateFormatter dateFromString:@"2017-07-26"];
NSDate *endDate = [dateFormatter dateFromString:@"2017-09-01"];
//利用NSCalendar比较日期的差异
NSCalendar *calendar = [NSCalendar currentCalendar];
/**
* 要比较的时间单位,常用如下,可以同时传:
* NSCalendarUnitDay : 天
* NSCalendarUnitYear : 年
* NSCalendarUnitMonth : 月
* NSCalendarUnitHour : 时
* NSCalendarUnitMinute : 分
* NSCalendarUnitSecond : 秒
*/
NSCalendarUnit unit = NSCalendarUnitDay;//只比较天数差异
//比较的结果是NSDateComponents类对象
NSDateComponents *delta = [calendar components:unit fromDate:startDate toDate:endDate options:0];
//打印
NSLog(@"%@",delta);
//获取其中的"天"
NSLog(@"%ld",delta.day);
打印结果
注意事项
1、如果同时比较月、天的时候,结果是N个月零N天,不会再是37天,例如
NSCalendarUnit unit1 = NSCalendarUnitDay | NSCalendarUnitMonth;//同时比较天数、月份差异
//比较的结果是NSDateComponents类对象
NSDateComponents *delta1 = [calendar components:unit1 fromDate:startDate toDate:endDate options:0];
//打印
NSLog(@"%@",delta1);
打印结果
即1个月零6天。
2、在遇到2月,闰年等不标准时期,这种方式的运算结果非常准确。