2012-11-05 64 views
7

我想比較兩天的NSDate對象,我在第一次使用NSDateComponents計算我的兩個日期對象之間的差異,但它工作正常。兩個NSDate對象之間的天數

NSString *dateStr [email protected]"2012-11-05 15:00:00"; 
    NSDate *date = [dateFormat dateFromString:dateStr]; 
    NSDateComponents *datesDiff = [calendar components: NSDayCalendarUnit 
               fromDate: date 
               toDate: [NSDate date] 
               options: 0]; 

這不能解決我的問題。事實上,當date1 = 2012-11-05 23:00:00和date2 = 2012-11-06 10:00:00時,兩個日期之間的差異是0天和11個小時。 我正在尋找一些東西,可以讓我檢測一天的變化,換句話說,當date1 = 2012-11-05 23:00:00和date2 = 2012-11-06 00:01:00時,有一天差異。

如果有人知道解決方案,我會歡迎他的建議。 在此先感謝

回答

19

我認爲你正在尋找這(從Date and Time Programming Guide):

@implementation NSCalendar (MySpecialCalculations) 

-(NSInteger)daysWithinEraFromDate:(NSDate *) startDate toDate:(NSDate *) endDate 
{ 
    NSInteger startDay=[self ordinalityOfUnit:NSDayCalendarUnit 
      inUnit: NSEraCalendarUnit forDate:startDate]; 
    NSInteger endDay=[self ordinalityOfUnit:NSDayCalendarUnit 
      inUnit: NSEraCalendarUnit forDate:endDate]; 
    return endDay-startDay; 
} 
@end 

之間

上市兩個日期之間的13天,因爲午夜的數量編輯:迅捷版:

extension NSCalendar { 
    func daysWithinEraFromDate(startDate: NSDate, endDate: NSDate) -> Int { 
     let startDay = self.ordinalityOfUnit(.Day, inUnit: NSCalendarUnit.Era, forDate: startDate) 
     let endDay = self.ordinalityOfUnit(.Day, inUnit: NSCalendarUnit.Era, forDate: endDate) 
     return endDay - startDay 
    } 
} 
+0

這正是我想要的,我們要創造一個類別NSCale如文中所述。謝謝 – Ali

6
NSString *start = @"2010-09-01"; 
NSString *end = @"2010-12-01"; 

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"yyyy-MM-dd"]; 
NSDate *startDate = [f dateFromString:start]; 
NSDate *endDate = [f dateFromString:end]; 
[f release]; 

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit 
                fromDate:startDate 
                 toDate:endDate 
                options:0]; 
[gregorianCalendar release]; 

組件現在保持不同。

NSLog(@"%ld", [components day]); 
0
func daysBetweenDates(startDate: NSDate, endDate: NSDate) -> Int 
{ 
    let calendar = NSCalendar.currentCalendar() 

    let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: []) 

    return components.day 
} 

let calendar = NSCalendar.currentCalendar(); 
let component1 = calendar.component(.Day, fromDate: fromDate) 
let component2 = calendar.component(.Day, fromDate: toDate) 
let difference = component1 - component2 
0

對於斯威夫特3:

從@馬薩的回答擴展:

extension Calendar { 
    func daysWithinEraFromDate(startDate: Date, endDate: Date) -> Int? { 
     guard let startDay = ordinality(of: .day, in: .era, for: startDate) else { 
      return nil 
     } 

     guard let endDay = ordinality(of: .day, in: .era, for: endDate) else { 
      return nil 
     } 

     return endDay - startDay 
    } 
}