2011-04-19 88 views
0

我想創建倒計時的天數直到某個日期。我對小時或分鐘不感興趣,只是從當前日期到設定日期的天數。這是我一直在嘗試:NSDate天數倒計時

NSDate *date = [NSDate date]; 
NSString *dateString = [date description]; 
// this **dateString** string will have **"yyyy-MM-dd HH:mm:ss +0530"** 
// NSMutableString *mutString = dateString; 
NSArray *arr = [dateString componentSeperatedByString:@" "]; 
// arr will have [0] -> yyyy-MM-dd, [1] -> HH:mm:ss, [2] -> +0530 (time zone) 

但它不工作,因爲目前的日期是分鐘和秒的時間。

//NSDate *currentDate = [[NSDate alloc] init]; 
NSString *start = [arr objectAtIndex:0];//[NSString stringWithFormat:@"%@", currentDate];//@"2011-11-05"; 
NSLog(@"%@",start); 
NSString *end = @"2011-6-03"; 

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]; 
NSInteger days = [components day]; 
[gregorianCalendar release]; 
NSLog(@"%i", days); 

我真的不明白大部分代碼,我不familar用的NSDate和格式化,但是這是我的一幫網絡代碼的組合。

在此先感謝。

回答

5

您可以通過這種方式計算當天的天數......

NSDate NewDate = Here來比較您的日期;

NSDateComponents * dateComp = [[NSDateComponents alloc] init];

NSCalendar *Calander = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateFormatter *dateFormat=[[NSDateFormatter alloc] init]; 

NSDateComponents *comps=[[NSDateComponents alloc] init]; 

unsigned int unitFlags = NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 

dateComp = [Calander components:unitFlags fromDate:[NSDate date]]; 

[dateFormat setDateFormat:@"dd"]; 
[comps setDay:[[dateFormat stringFromDate:[NSDate date]] intValue]]; 
[dateFormat setDateFormat:@"MM"]; 
[comps setMonth:[[dateFormat stringFromDate:[NSDate date]] intValue]]; 
[dateFormat setDateFormat:@"yyyy"]; 
[comps setYear:[[dateFormat stringFromDate:[NSDate date]] intValue]]; 
[dateFormat setDateFormat:@"HH"]; 
[comps setHour:05]; 
[dateFormat setDateFormat:@"mm"]; 
[comps setMinute:30]; 

NSDate *currentDate=[Calander dateFromComponents:comps]; 

//NSLog(@"Current Date is :- '%@'",currentDate); 

dateComp = [Calander components:unitFlags fromDate:newDate]; 

    [dateFormat setDateFormat:@"dd"]; 
    [comps setDay:[[dateFormat stringFromDate:newDate] intValue]]; 
    [dateFormat setDateFormat:@"MM"]; 
    [comps setMonth:[[dateFormat stringFromDate:newDate] intValue]]; 
    [dateFormat setDateFormat:@"yyyy"]; 
    [comps setYear:[[dateFormat stringFromDate:newDate] intValue]]; 
    [dateFormat setDateFormat:@"HH"]; 
    [comps setHour:05]; 
    [dateFormat setDateFormat:@"mm"]; 
    [comps setMinute:30]; 

    NSDate *reminderDate=[Calander dateFromComponents:comps]; 

    //NSLog(@"Current Date is :- '%@'",reminderDate); 

    //NSLog(@"Current Date is :- '%@'",currentDate); 

    NSTimeInterval ti = [reminderDate timeIntervalSinceDate:currentDate]; 

    //NSLog(@"Time Interval is :- '%f'",ti); 
    int days = ti/86400; 
+0

如何設置新日期 – Andrew 2011-04-20 01:34:34

+0

完美。非常感謝! – Andrew 2011-04-20 01:41:20

1

您可以使用NSDateComponents剪掉時間:通過指定僅day日期單位

NSDate* targetDate = ... 
NSDate* today = [NSDate date] 

NSCalendar* cal = [NSCalendar currentCalendar] 

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 
targetDate = [cal dateFromComponents:[cal components:unitFlags fromDate:targetDate]]; 
today = [cal dateFromComponents:[cal components:unitFlags fromDate:today]]; 

然後搶在天的差異(這可能沒有代碼工作上面,我不知道) :

int days = [[cal components:NSDayCalendarUnit fromDate:today toDate:targetDate options:0] day]; 
1

使用下面的代碼,

NSTimeInterval dateDiff = [eventDate timeIntervalSinceNow]; 
int countDown=trunc(dateDiff/(60*60*24));