2010-07-05 196 views
3

我试图做一个计数器,它显示了我们离开欧洲之前的天数。这只是大约70天(截至今天),所以我不认为我应该担心天文数字或任何事情,但我真的很难过 - 我附上了一些朋友给我的代码,这些代码也不行。当我说我已经尝试过所有我能想到的事情时,请相信我 - 在任何人在我这些论坛上看到完成的事情之前,任何人都会咬我的头,是的,我在Apple文档中看到了非常广泛的内容,但我不是100%确定从哪里开始 - 我已经尝试过NSTimer,NSDate及其所有的子类和方法,但没有什么能够立即跳出来。倒计时 - iPhone倒数计时器

在我认为我应该做的事情方面,我想我需要以某种方式为今天/现在/当天的“日期”分配一个整数值,这将使用[NSDate date]动态更改,然后相同我们离开的日期。当方法被再次调用时,倒计时只是更新(如果需要,我可以使用NSTimer来执行此操作),并且倒计时中显示的值是这两个值之间的差异。

我不是特别想要一种闪烁的东西,每秒更新一次,直到我们离开 - 我个人认为这很俗气,但如果有人知道如何,那么我会很感激它为未来的参考。

我也做了大量的谷歌搜索,我可能只是使用错误的搜索条件,但我无法找到任何东西。

任何帮助,非常感谢。

非常感谢。

Michaeljvdw

- (void)countDownMethod { 
NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setDay:startDay]; 
[comps setMonth:startMonth]; 
[comps setYear:startYear]; 
[comps setHour:startHour]; 

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *date = [gregorian dateFromComponents:comps]; 
NSLog(@"%@",date); 
[gregorian release]; 
[comps release]; 
NSTimeInterval diff = [date timeIntervalSinceNow]; 

int diffInt = diff; 

NSString *days = [NSString stringWithFormat:@"%d",diffInt/86400]; 
day0.text = @"0"; 
day1.text = @"0"; 
day2.text = @"0"; 
NSLog(@"Days Length: %d",days.length); 

if(days.length >= 1){ 
    day2.text = [days substringFromIndex:days.length - 1]; 

    if(days.length >= 2){ 
     day1.text = [days substringWithRange:NSMakeRange(days.length - 2, 1)]; 

     if(days.length >= 3){ 
      day0.text = [days substringWithRange:NSMakeRange(days.length - 3, 1)]; 
     } 
    } 
} 

NSString *hours = [NSString stringWithFormat:@"%d",(diffInt%86400)/3600]; 
hour0.text = @"0"; 
hour1.text = @"0"; 
NSLog(@"Hours Length: %d",hours.length); 

if(hours.length >= 1){ 
    hour1.text = [hours substringFromIndex:hours.length - 1]; 

    if(hours.length >= 2){ 
     hour0.text = [hours substringWithRange:NSMakeRange(hours.length - 2, 1)]; 
    } 
} 
NSString *minutes = [NSString stringWithFormat:@"%d",((diffInt%86400)%3600)/60]; 
minute0.text = @"0"; 
minute1.text = @"0"; 
NSLog(@"Minutes Length: %d",minutes.length); 

if(minutes.length >= 1){ 
    minute1.text = [minutes substringFromIndex:minutes.length - 1]; 

    if(minutes.length >= 2){ 
     minute0.text = [minutes substringWithRange:NSMakeRange(minutes.length - 2, 1)]; 
    } 
} 

}

回答

4

如果你知道在2个日期(您NSTimeInterval),那么你可以很容易地转换到这一点在格式天字符串之间的秒数:小时:分钟:秒如下。

- (NSString*)secsToDaysHoursMinutesSecondsString:(NSTimeInterval)theSeconds { 
div_t r1 = div(theSeconds, 60*60*24); 
NSInteger theDays = r1.quot; 
NSInteger secsLeftFromDays = r1.rem; 

div_t r2 = div(secsLeftFromDays, 60*60); 
NSInteger theHours = r2.quot; 
NSInteger secsLeftFromHours = r2.rem; 

div_t r3 = div(secsLeftFromHours, 60); 
NSInteger theMins = r3.quot; 
NSInteger theSecs = r3.rem; 

NSString* days; 
if (theDays < 10) { // make it 2 digits 
    days = [NSString stringWithFormat:@"0%i", theDays]; 
} else { 
    days = [NSString stringWithFormat:@"%i", theDays]; 
} 

NSString* hours; 
if (theHours < 10) { // make it 2 digits 
    hours = [NSString stringWithFormat:@"0%i", theHours]; 
} else { 
    hours = [NSString stringWithFormat:@"%i", theHours]; 
} 

NSString* mins; 
if (theMins < 10) { // make it 2 digits 
    mins = [NSString stringWithFormat:@"0%i", theMins]; 
} else { 
    mins = [NSString stringWithFormat:@"%i", theMins]; 
} 

NSString* secs; 
if (theSecs < 10) { // make it 2 digits 
    secs = [NSString stringWithFormat:@"0%i", theSecs]; 
} else { 
    secs = [NSString stringWithFormat:@"%i", theSecs]; 
} 

return [NSString stringWithFormat:@"%@:%@:%@:%@", days, hours, mins,secs]; 
} 
+0

非常感谢你,这完美的作品。非常感激! – Michaeljvdw 2010-07-06 04:41:27

2
//Another simple way to get the numbers of days difference to a future day from today. 

NSTimeInterval todaysDiff = [todayDate timeIntervalSinceNow]; 
NSTimeInterval futureDiff = [futureDate timeIntervalSinceNow]; 
NSTimeInterval dateDiff = futureDiff - todaysDiff; 

div_t r1 = div(dateDiff, 60*60*24); 
NSInteger theDays = r1.quot; 

label.text = [NSString stringWithFormat:@"%i", theDays];