web-dev-qa-db-fra.com

Vérifier si un NSDate est supérieur à un autre

if (datStartDate > datEndDate) {

Cela ne semble pas fonctionner. Je sais qu'il y a une isEqual, etc., mais comment puis-je effectuer "est plus grand que"?

Il y a les deux NSDate.

42
Jules

La méthode la plus simple que je connaisse est la suivante:

if( [firstDate timeIntervalSinceDate:secondDate] > 0 ) {

Les autres réponses couvrent la comparaison:, voulu ajouter de la saveur;).

135
dannywartnaby

Pour comparer les dates, utilisez la méthode -compare::

Valeur de retour si:

  • Le destinataire et une autre date sont exactement égaux les uns aux autres, NSOrderedSame  
  • Le récepteur est plus tard dans le temps qu’un autreDate, NSOrderedDescending  
  • Le récepteur est plus tôt que anotherDate, NSOrderedAscending .
30
Vladimir

Qu'en est-il de...

if ([datStartDate earlierDate: datEndDate] == datStartDate) {
    // datStartDate is earlier
} else {
    // datEndDate is earlier
}
19
Kevin Mitts

Comme vous avez NSDates :

NSDate *datStartDate = [NSDate dateWithString:@"2010-10-01 03:00:00 +0900"];
NSDate *datEndDate   = [NSDate dateWithString:@"2010-10-01 04:00:00 +0900"];

if ( ([datStartDate compare:datEndDate]) == NSOrderedDescending ) {
    ...
}
12
martin clayton

Swift 2 version de réponse acceptée:

if firstDate.timeIntervalSinceDate(secondDate) > 0 {
    // firstDate is greater (further in the future) than secondDate
}
2
brandonscript
if ([startDate compare:endDate] == NSOrderedAscending) {
        NSLog(@"startDate is EARLIER than endDate");
}
1
joan

Je travaille avec NSDate et NSComparison depuis des années et je ne me souviendrai jamais de la façon dont cela fonctionne. J'ai donc écrit une extension de commodité sur Date

func isBefore(_ otherDate: Date) -> Bool {
    let result = self.compare(otherDate)
    switch result {
    case .orderedAscending:
        return true
    case .orderedSame,
         .orderedDescending:
        return false
    }
}

Si vous voulez avoir une extension isAfter, il lui suffit de renvoyer true pour orderedDescending.

0
DesignatedNerd