Question

Je suis en train de faire un compteur qui indique le nombre de jours jusqu'à ce que nous partons en voyage en Europe. Il est seulement 70 jours (en date d'aujourd'hui), donc je ne crois pas que je devrais avoir à vous soucier des numéros astronomiquement grandes ou quoi que ce soit, mais je suis vraiment perplexe - Je joins le code que certains amis me ont donné, que don « t travail soit. Croyez-moi quand je dis que j'ai tout essayé je peux penser - et avant que quelqu'un mord ma tête, que je l'ai vu faire sur ces forums, oui, je l'ai fait très largement au regard de la documentation Apple, mais je ne suis pas 100% sûr où commencer - j'ai essayé NSTimer, NSDate et toutes leurs sous-classes et méthodes, mais il n'y a rien qui saute immédiatement

.

En ce qui concerne ce que je pense que je devrais effectivement faire, je pense que je dois attribuer en quelque sorte une valeur entière pour le « jour » aujourd'hui / maintenant / le jour en cours, qui changera dynamiquement en utilisant la [NSDate date] et la même chose pour la date à laquelle nous partons. Le compte à rebours est tout simplement mise à jour lorsque la méthode est appelée à nouveau (je peux le faire en utilisant NSTimer le cas échéant) et la valeur qui est affichée sur le compte à rebours est le differnce entre ces deux valeurs.

Je ne veux surtout pas avoir un clignotement genre de chose qui met à jour toutes les secondes jusqu'à ce que nous laissons -. Personnellement, je pense que ce mauvais goût, mais si quelqu'un sait comment je serais reconnaissant pour toute référence ultérieure

Je l'ai aussi fait une vaste recherche de Google, et je peux simplement en utilisant les termes de recherche mal, mais je ne trouve rien non plus.

Toute aide est grandement appréciée.

Merci beaucoup.

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)];
    }
}

}

Était-ce utile?

La solution

Si vous connaissez le temps en secondes entre 2 dates (votre NSTimeInterval), alors vous pouvez facilement convertir en une chaîne dans les jours format: heures: min:. Secondes comme suit

- (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];
}

Autres conseils

    //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];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top