Je suis en train de créer une méthode qui calcule le temps plein dans le format de:
0 Year 0 month 1 day 1 hour 15 minutes 5 seconds
Calculer le temps écoulé amical complet de deux NSDates
Je passe deux dates suivantes à titre d'exemples. Ce qui devrait être 1 heure 15 minutes et 5 secondes.
NSString * startDate = @"2016-08-24 10:00:00";
NSString * endDate = @"2016-08-24 11:15:05";
NSLog(@"Total Time: %@", [self caluculateTimeFrom:startDate endDate:endDate]);
La méthode pour effectuer les calculs
- (NSString*) caluculateTimeFrom:(NSString*)startDate endDate:(NSString*)endDate {
NSLog(@"Start Date: %@", startDate);
NSLog(@"End Date: %@", endDate);
if (startDate == nil || endDate == nil) {
return nil;
}
NSString * returnDate = @"";
NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDate * date1 = [dateFormater dateFromString:startDate];
NSDate * date2 = [dateFormater dateFromString:endDate];
float totalElapsedSeconds = roundf([date2 timeIntervalSinceDate:date1]);
NSLog(@"totalElapsedTime: %f", totalElapsedSeconds);
if (totalElapsedSeconds < SECOND) {
returnDate = @"0 seconds";
return returnDate;
}
float days = totalElapsedSeconds/(60 * 60 * 24);
totalElapsedSeconds -= days * (60 * 60 * 24);
float hours = totalElapsedSeconds/(60 * 60);
totalElapsedSeconds -= hours * (60 * 60);
float minutes = totalElapsedSeconds/60;
returnDate = [NSString stringWithFormat:@"%f days %f hours %f minutes", days, hours, minutes];
return returnDate;
}
J'ai regardé par-dessus SO quiestions mais theyu tous semblent cracher que par exemple 1. c'est à dire il y a 1 jour mais pas la chaîne complète avec les restes.
Qu'est-ce que je fais mal? Veuillez ne pas utiliser de frameworks Github externes ou de CocoaPods. Comme les plus people recommend ne pas accomplir ce que je veux.
ACTUALISATION utilisateur Rob a suggéré d'utiliserNSDateComponentsFormatter
Pour obtenir le style que je voulais ici est le code pour une utilisation future. Cela ne fonctionne que sur iOS 8+
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
formatter.allowedUnits = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
Une fois que vous avez vos deux objets 'NSDate', utilisez' NSDateComponentsFormatter' pour construire votre chaîne du temps écoulé. – Rob
Cela ne fonctionne pas. Il crache 'Environ 75 minutes restantes' –
@Firemarble Vous devez configurer le' NSDateComponentsFormatter' correctement pour obtenir ce que vous voulez. – rmaddy