我如何计算两个date之间的差异?

我如何计算2010年1月1日至2010年2月3日之间的天数?

NSDate *date1 = [NSDate dateWithString:@"2010-01-01 00:00:00 +0000"]; NSDate *date2 = [NSDate dateWithString:@"2010-02-03 00:00:00 +0000"]; NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1]; int numberOfDays = secondsBetween / 86400; NSLog(@"There are %d days in between the two dates.", numberOfDays); 

编辑:

请记住, NSDate对象表示确切的时间,他们没有任何关联的时区信息。 当您使用例如NSDateFormatter将string转换为date时, NSDateFormatter从configuration的时区转换时间。 因此,两个NSDate对象之间的秒数总是与时区无关的。

此外, 这个文档指定Cocoa的时间执行不占用闰秒,所以如果你需要这样的准确性,你将需要推出你自己的实现。

你可能想要使用这样的东西:

 NSDateComponents *components; NSInteger days; components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit fromDate: startDate toDate: endDate options: 0]; days = [components day]; 

我相信这种方法可以解释诸如夏时制变化的date等情况。

 NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds 

其中date1date2NSDate的。

另外请注意NSTimeInterval的定义:

 typedef double NSTimeInterval; 

结帐出来。 它使用iOS日历来计算夏令时和闰年。您可以更改string和条件以包括带有小时和天数的分钟数。

 +(NSString*)remaningTime:(NSDate*)startDate endDate:(NSDate*)endDate { NSDateComponents *components; NSInteger days; NSInteger hour; NSInteger minutes; NSString *durationString; components = [[NSCalendar currentCalendar] components: NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute fromDate: startDate toDate: endDate options: 0]; days = [components day]; hour = [components hour]; minutes = [components minute]; if(days>0) { if(days>1) durationString=[NSString stringWithFormat:@"%d days",days]; else durationString=[NSString stringWithFormat:@"%d day",days]; return durationString; } if(hour>0) { if(hour>1) durationString=[NSString stringWithFormat:@"%d hours",hour]; else durationString=[NSString stringWithFormat:@"%d hour",hour]; return durationString; } if(minutes>0) { if(minutes>1) durationString = [NSString stringWithFormat:@"%d minutes",minutes]; else durationString = [NSString stringWithFormat:@"%d minute",minutes]; return durationString; } return @""; } 

Swift 3

 var date1 = Date(string: "2010-01-01 00:00:00 +0000") var date2 = Date(string: "2010-02-03 00:00:00 +0000") var secondsBetween: TimeInterval = date2.timeIntervalSince(date1) var numberOfDays: Int = secondsBetween / 86400 print(numberOfDays) 

您可以通过转换date以秒为单位find差异,并采取自1970年以来的时间间隔为此,然后您可以find两个date之间的差异。