如何计算iOS中两个date之间的时间(小时)

如何计算iOS中两次(可能发生在不同日子)之间的时间(以小时为单位)?

NSDate函数timeIntervalSinceDate:将以秒为单位给出两个date的差异。

  NSDate* date1 = someDate; NSDate* date2 = someOtherDate; NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2]; double secondsInAnHour = 3600; NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour; 

请参阅苹果参考库 http://developer.apple.com/library/mac/navigation/,或者如果您使用Xcode,只需从菜单中select帮助/文档

请参阅: 如何将转换为-nstimeinterval-seconds转换为分钟

– 编辑:请参阅下面的正确处理夏令时/闰秒的答案

 NSCalendar *c = [NSCalendar currentCalendar]; NSDate *d1 = [NSDate date]; NSDate *d2 = [NSDate dateWithTimeIntervalSince1970:1340323201];//2012-06-22 NSDateComponents *components = [c components:NSHourCalendarUnit fromDate:d2 toDate:d1 options:0]; NSInteger diff = components.minute; NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit 

将所需的组件更改为一天,一小时或一分钟,即所需的差异。 如果select了NSDayCalendarUnit ,那么它将返回类似NSHourCalendarUnitNSMinuteCalendarUnit两个date之间的天数

 -(NSMutableString*) timeLeftSinceDate: (NSDate *) dateT { NSMutableString *timeLeft = [[NSMutableString alloc]init]; NSDate *today10am =[NSDate date]; NSInteger seconds = [today10am timeIntervalSinceDate:dateT]; NSInteger days = (int) (floor(seconds / (3600 * 24))); if(days) seconds -= days * 3600 * 24; NSInteger hours = (int) (floor(seconds / 3600)); if(hours) seconds -= hours * 3600; NSInteger minutes = (int) (floor(seconds / 60)); if(minutes) seconds -= minutes * 60; if(days) { [timeLeft appendString:[NSString stringWithFormat:@"%ld Days", (long)days*-1]]; } if(hours) { [timeLeft appendString:[NSString stringWithFormat: @"%ld H", (long)hours*-1]]; } if(minutes) { [timeLeft appendString: [NSString stringWithFormat: @"%ld M",(long)minutes*-1]]; } if(seconds) { [timeLeft appendString:[NSString stringWithFormat: @"%lds", (long)seconds*-1]]; } return timeLeft; } 

结帐:它采取夏令时,闰年,因为它使用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 @""; } 

迅速的方式

 class func hoursBetweenDates(date1: NSDate, date2: NSDate) -> Int { let secondsBetween = abs(Int(date1.timeIntervalSinceDate(date2))) let secondsInHour = 3600 return secondsBetween / secondsInHour }