日をカウントダウンする-iPhoneカウントダウンタイマー
-
02-10-2019 - |
質問
ヨーロッパへの旅行に出発するまでの日数を示すカウンターを作ろうとしています。わずか70日間(今日の時点で)ので、天文学的に多数などを心配する必要があるとは思いませんが、本当に困惑しています。どちらも機能します。私が考えられるすべてを試したと言ったら私を信頼してください - そして誰もが私の頭を噛む前に、私がこれらのフォーラムでやったのを見ました、はい、私はAppleのドキュメントを非常に広範囲に見ましたが、私は100%ではありませんどこから始めればいいのか - 私はNSTIMER、NSDATE、およびそのすべてのサブクラスと方法を試しましたが、すぐに飛び出すものは何もありません。
私が実際にすべきだと思うことに関しては、今日/現在/現在の日に整数値を何らかの形で割り当てる必要があると思います。 [NSDate date]
そして、私たちが去る日付についても同じです。カウントダウンは、メソッドが再び呼び出されたときに更新されます(必要に応じてnstimerを使用してこれを行うことができます)。カウントダウンに表示される値は、これら2つの値の違いです。
私たちが去るまで毎秒更新する点滅するようなものを特に望んでいません - 個人的にはそれは粘着性があると思いますが、誰かがどのように知っているなら、将来の参考に感謝します。
また、Googleの広範な検索を行ってきましたが、単に間違った検索用語を使用しているだけかもしれませんが、そこには何も見つかりません。
どんな助けも大歓迎です。
どうもありがとうございます。
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)];
}
}
}
解決
2つの日付(nstimeinterval)の間の数秒で時間を知っている場合、それをフォーマット日:時間:mins:secsの形式で簡単に文字列に変換できます。
- (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];
}
他のヒント
//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];