NSDateComponents 使用總結(jié)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容