1.用日歷計(jì)算相差天數(shù)(默認(rèn)會(huì)把時(shí)間也算上)如下:
//2017-03-20 15:58:50 [NSDate date]
//2017-03-24 01:13:59 startDate
NSDate *startTime = [NSDate dateWithTimeIntervalSince1970:1490289239];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = kCFCalendarUnitYear | kCFCalendarUnitMonth | NSCalendarUnitDay | kCFCalendarUnitHour | kCFCalendarUnitMinute | kCFCalendarUnitSecond;
NSDateComponents *dateComponents = [calendar components:unit fromDate:[NSDate date] toDate:startDate options:0];
NSLog(@"%@", dateComponents);
輸出結(jié)果:
2017-03-20 15:58:48.722 111[14894:146007] <NSDateComponents: 0x60000014ed30> Calendar Year: 0 Month: 0 Day: 3 Hour: 9 Minute: 15 Second: 10
為這個(gè)時(shí)候你就會(huì)發(fā)現(xiàn),20跟24號(hào),我們實(shí)際想要的結(jié)果是4天,但是這個(gè)得到的結(jié)果卻是3天。解決方法如下:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = kCFCalendarUnitYear | kCFCalendarUnitMonth | NSCalendarUnitDay | kCFCalendarUnitHour | kCFCalendarUnitMinute | kCFCalendarUnitSecond;
NSDateComponents *currentDateCompontes = [calendar components:unit fromDate:[NSDate date]];
NSDateComponents *startDateCompontes = [calendar components:unit fromDate:startTime];
NSDate *currentDate = [calendar dateFromComponents:[self transformDate:currentDateCompontes]];
NSDate *startDate = [calendar dateFromComponents:[self transformDate:startDateCompontes]];
NSDateComponents *dateComponents = [calendar components:unit fromDate:currentDate toDate:startDate options:0];
NSLog(@"%@", dateComponents);
//將時(shí)分秒設(shè)置為00:00:00 只計(jì)算日期相差天數(shù)
- (NSDateComponents *)transformDate:(NSDateComponents *)currentDate;
{
NSDateComponents *dateCompontes = [[NSDateComponents alloc] init];
[dateCompontes setYear:currentDate.year];
[dateCompontes setMonth:currentDate.month];
[dateCompontes setDay:currentDate.day];
[dateCompontes setHour:0];
[dateCompontes setMinute:0];
[dateCompontes setSecond:0];
return dateCompontes;
}
2017-03-20 16:06:26.768 111[15157:150705] <NSDateComponents: 0x608000143de0> Calendar Year: 0 Month: 0 Day: 4 Hour: 0 Minute: 0 Second: 0
這樣就和預(yù)想的結(jié)果一樣了。
2.還有一種方法就是拿到日期,直接對(duì)天進(jìn)行相減操作也可實(shí)現(xiàn)
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = kCFCalendarUnitYear | kCFCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *currentDateCompontes = [calendar components:unit fromDate:[NSDate date]];
NSDateComponents *startDateCompontes = [calendar components:unit fromDate:startTime];
NSLog(@"%ld", startDateCompontes.day - currentDateCompontes.day);
2017-03-20 16:14:31.910 111[15433:155187] 4