我如何计算两个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
其中date1
和date2
是NSDate
的。
另外请注意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之间的差异。