现在的位置: 首页 > 综合 > 正文

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

2017年08月17日 ⁄ 综合 ⁄ 共 1308字 ⁄ 字号 评论关闭

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


抱歉!评论已关闭.