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
.
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;).
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 .
Qu'en est-il de...
if ([datStartDate earlierDate: datEndDate] == datStartDate) {
// datStartDate is earlier
} else {
// datEndDate is earlier
}
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 ) {
...
}
Swift 2 version de réponse acceptée:
if firstDate.timeIntervalSinceDate(secondDate) > 0 {
// firstDate is greater (further in the future) than secondDate
}
if ([startDate compare:endDate] == NSOrderedAscending) {
NSLog(@"startDate is EARLIER than endDate");
}
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
.