Comment puis-je calculer la première date ultérieure que maintenant d'une date dans le passé en répétant un certain intervalle? Par exemple:Calculer le prochain événement à partir de maintenant donné un NSDate dans le passé et un intervalle de répétition
// Date in the past
NSDate *pastDate = [NSDate my_dateWithString:@"11/09/2001"];
// Time interval
NSTimeInterval repeatInterval = 14 * 24 * 60 * 60; // 2 weeks
// Current date
NSDate *now = [NSDate date]; // 23/07/2015
// Start calculating next date ->
NSDate *nextDate = /* interval added to past date */
// Is result later than now?
// No? Calculate again
// Abracadabra
NSLog(@"nexDate = %@",nextDate); // 28/07/2015
Je ne veux pas utiliser itérations. Je suis préoccupé par le calcul d'un cas comme une date de début d'une année dans le passé et un intervalle de répétition d'un jour.
Voici ma solution, mais il a des itérations.
NSDateComponents *twoWeeksDateComponents = [NSDateComponents new];
twoWeeksDateComponents.weekOfMonth = 2;
NSDate *date = self.picker.date;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *nextDate = date;
NSComparisonResult result = [nextDate compare:now];
while (result == NSOrderedAscending) {
nextDate = [calendar dateByAddingComponents:kTwoWeeksDateComponents
toDate:nextDate
options:NSCalendarMatchNextTime];
result = [nextDate compare:now];
}
NSLog(@"nexDate = %@",nextDate); // 28/07/2015
fini par moi affichage avant de voir le vôtre ... serait-il OK pour utiliser le mien (il semble toujours revenir la bonne date, conserve le temps et travaille sur des intervalles fous comme 1 semaine + 1 jour + 3 heures + 4 minutes)? Ou devrais-je passer par des composants de date plutôt que de simplement faire des calculs sur l'intervalle? – Metabble
Votre version ne peut pas faire face très facilement avec des unités répétées de mois ou d'années. Essayez d'utiliser une date de début de 2015-03-01 et un intervalle de 1 an, par exemple. 'NSCalendar' représente le jour bissextile de 2016. –
' NSDateComponents' peut également gérer des intervalles composés. –