2011-04-19 87 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));