iOS 计算两个日期之前相隔多少晚

本文介绍了如何使用iOS的NSCalendar来计算两个日期之间相隔的天数,尤其关注如何忽略时间部分,精确计算两个日期之间相隔的晚数。通过示例代码展示了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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];
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值