2011-10-31 44 views
3

如何知道從現在開始到我的應用中指定的日期爲止的天數?以下是我迄今爲止,但它出現「-30」每一次,無論日期是什麼:如何判斷從現在開始直到NSDate的天數?

大約只用 -timeIntervalSinceNowNSDate
NSDate * selected = [DatePicker date]; 
NSString * date = [selected description]; 

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit 
                   fromDate:DatePicker.date]; 

CalLabel1.text = [NSString stringWithFormat:@"%d", [components day]]; 

NSDateFormatter *temp = [[NSDateFormatter alloc] init]; 
[temp setDateFormat:@"dd/MM/yyyy"]; 
NSDate *stDt = [temp dateFromString:[temp stringFromDate:[NSDate date]]]; 
NSDate *endDt = [temp dateFromString:[temp stringFromDate:[NSString stringWithFormat:@"%d", [components date]]]]; 
unsigned int unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; 
NSCalendar *gregorian = [[NSCalendar alloc] 
         initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *comps = [gregorian components:unitFlags fromDate:stDt toDate:endDt options:0]; 
int days = [comps day]; 

NSLog(@"%i", [comps day]); 

回答

7
NSDate * selected = [DatePicker date]; 
NSCalendar *gregorian = [[NSCalendar alloc] 
          initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *comps = [gregorian components: NSDayCalendarUnit 
             fromDate: [NSDate date] 
             toDate: selected 
             options: 0]; 
int days = [comps day]; 

NSLog(@"%i", [comps day]); 

這種計算現在和所選日期之間的天數。你用日期格式化器搞亂了所有的東西是錯誤的,沒有必要。

+0

這通常會更好,因爲它會考慮日曆的任何相關怪癖。 – Chuck

3

什麼?

NSDate *selectedDate = [datePicker date]; 
NSTimeInterval numberOfSecondsUntilSelectedDate = [selectedDate timeIntervalSinceNow]; 
NSInteger numberOfDays = numberOfSecondsUntilSelectedDate/86400; // 86,400 seconds in a day 
+0

+1 - 但如果86400是一個常量或類似(60 * 60 * 24)被寫入,它可能會更容易閱讀。 – bryanmac

+0

同意。我會在生產代碼中使用一個常量,但我覺得評論足以用於演示目的。 –

+1

更好地使用日曆API而不是手動進行計算。這幾天很容易,但一旦你想知道幾個星期或幾個月,這不是微不足道的。 – Sven

1

斯威夫特3版接受的答案。

let dateComponents = Calendar.current.dateComponents([.day], from: fromDate, to: Date()) 

// number of days is an optional Int 
if let daysCount = dateComponents.day { 
    print(daysCount) 
} 
相關問題