2011-08-22 460 views
14

我使用日期時間選取器來取兩個NSDates。現在我想要計算這兩個NSDates之間的天數。我怎樣才能找到兩個NSDates之間的區別。兩個NSDates之間的區別

請給我一些解決方案。

非常感謝。

+0

可能重複(http://stackoverflow.com/questions/4739483 /天數之間的兩個nsdates) –

回答

24

的NSDate參考是一個偉大的小文件: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate 

是你在找什麼,如果你想的時間間隔差。

對於天(因爲不是每天都有相同的分鐘數,小時)要見下文馬丁斯回答,並使用NSDateComponents與[NSCalendar currentCalendar]

+0

每天不會有相同的小時數???我以爲每天都有24小時?你能解釋這是怎麼回事? – GeneCode

+0

地球不會均勻旋轉,有些日子可能會比其他日子長。 –

53

這裏是你一個小寶石 - 超過幾天:

// Assuming you have fistDate and secondDate 

unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitDay | NSCalendarUnitMonth; 

NSDateComponents *conversionInfo = [currCalendar components:unitFlags fromDate:fistDate toDate:secondDate options:0]; 

int months = [conversionInfo month]; 
int days = [conversionInfo day]; 
int hours = [conversionInfo hour]; 
int minutes = [conversionInfo minute]; 

這是非常有用的 - 尤其是格式化字符串,如當:

[NSString stringWithFormat:@"%d months , %d days, %d hours, %d min", months, days, hours, minutes]; 

編碼愉快:)

+8

+1這是正確的做法。 –

+0

@Dave DeLong是的,很遺憾,人們很滿足於用這些事情用浮動和整數來玩硬性的方式。 – martin

+0

而且?我們應該如何處理firstDate和secondDate? – Gargo

1

這裏是一個迅速執行(我用這一切的時候,而像調試網絡請求和JSON解析的東西):[天排名第二NSDates之間]的

let date1 = NSDate() 

// do some long running task 

let date2 = NSDate() 
print(date2.timeIntervalSinceDate(date1)) 

// you can also do this in one line, of course: 
print(NSDate().timeIntervalSinceDate(date1))