350 votes

Comment ajouter un jour à une NSDate ?

En gros, comme le dit le titre. Je me demande comment je peux ajouter un jour à un cycle de vie. NSDate .

Donc si c'était le cas :

21st February 2011

Il deviendrait :

22nd February 2011

Ou si c'était le cas :

31st December 2011

Il deviendrait :

1st January 2012.

4 votes

Notez qu'une NSDate ne représente pas une date, mais un moment dans le temps. Elle comprend donc une heure ainsi qu'une date.

4 votes

D'accord - vous devriez utiliser la réponse de Zack German ci-dessous. Voir la réponse d'Apple Guide de programmation de la date et de l'heure .

754voto

Zaky German Points 7002

Swift 5.0 :

var dayComponent    = DateComponents()
dayComponent.day    = 1 // For removing one day (yesterday): -1
let theCalendar     = Calendar.current
let nextDate        = theCalendar.date(byAdding: dayComponent, to: Date())
print("nextDate : \(nextDate)")

Objectif C :

NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = 1;

NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSDate *nextDate = [theCalendar dateByAddingComponents:dayComponent toDate:[NSDate date] options:0];

NSLog(@"nextDate: %@ ...", nextDate);

Cela devrait être explicite.

21 votes

Vous pouvez également utiliser des composants négatifs pour soustraire une date.

59 votes

Solution bien meilleure que la réponse choisie

20 votes

+1 pour avoir utilisé des composants de date plutôt que d'ajouter une journée de secondes.

168voto

Chris Points 1342
NSDate *now = [NSDate date];
int daysToAdd = 1;
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];

109voto

iHS Points 3045

Swift 5

let today = Date()
let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: today)

Objectif-C

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
// now build a NSDate object for the next day
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate: [NSDate date] options:0];

14voto

Bhupendra Points 1697

Utilisez la fonction ci-dessous et utilisez le paramètre days pour obtenir la date daysAhead/daysBehind. Passez simplement le paramètre comme positif pour les dates futures ou négatif pour les dates précédentes :

+ (NSDate *) getDate:(NSDate *)fromDate daysAhead:(NSUInteger)days
{
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    dateComponents.day = days;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *previousDate = [calendar dateByAddingComponents:dateComponents
                                                     toDate:fromDate
                                                    options:0];
    [dateComponents release];
    return previousDate;
}

3voto

Tiago Points 773

Vous pouvez utiliser la méthode de NSDate - (id)dateByAddingTimeInterval:(NSTimeInterval)seconds donde seconds serait 60 * 60 * 24 = 86400

3 votes

La fonction addByTimeInterval de NSDate a été dépréciée dans iOS 4 ( bit.ly/vtOzvU ). Utilisez dateByAddingTimeInterval ( bit.ly/vRkFrN ) à la place.

6 votes

Les jours peuvent avoir 23, 24 ou 25 heures, en raison de l'heure d'été.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X