Проверка, больше ли одна NSDate, чем другая - PullRequest
44 голосов
/ 01 октября 2010
if (datStartDate > datEndDate) {

Это не похоже на работу.Я знаю, что есть isEqual и т. Д., Но как мне выполнить «больше, чем»?

Есть и NSDate.

Ответы [ 7 ]

137 голосов
/ 01 октября 2010

Самый простой способ, который я знаю, это:

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

Другие ответы охватывают сравнение: хотел добавить немного вкуса;).

30 голосов
/ 01 октября 2010

Для сравнения дат используйте -compare: метод:

Возвращаемое значение Если:

  • Получатель и anotherDate точно равны друг другу, NSOrderedSame
  • Получатель позднее по времени, чем другая дата, NSOrderedDescending
  • Получатель раньше по времени, чем другая дата, NSOrderedAscending .
19 голосов
/ 01 октября 2010

А как же ...

if ([datStartDate earlierDate: datEndDate] == datStartDate) {
    // datStartDate is earlier
} else {
    // datEndDate is earlier
}
12 голосов
/ 01 октября 2010

Как у вас есть 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 ) {
    ...
}
2 голосов
/ 29 января 2016

Swift 2 версия принятого ответа:

if firstDate.timeIntervalSinceDate(secondDate) > 0 {
    // firstDate is greater (further in the future) than secondDate
}
1 голос
/ 18 июня 2018
if ([startDate compare:endDate] == NSOrderedAscending) {
        NSLog(@"startDate is EARLIER than endDate");
}
0 голосов
/ 31 мая 2018

Я работал с NSDate и NSComparison много лет, и я никогда не могу вспомнить, как это работает. Поэтому я написал для него Date удобное расширение:

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

Если вы хотите иметь расширение isAfter, оно просто должно вернуть true для orderedDescending.

...