检查一个NSDate是否大于另一个

时间:2010-10-01 12:38:43

标签: objective-c nsdate

if (datStartDate > datEndDate) {

这似乎不起作用。我知道有一个isEqual等,但我怎么表现“大于”?

NSDate

7 个答案:

答案 0 :(得分:137)

我知道最简单的方法是:

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

其他答案涵盖比较:,想添加一些味道;)。

答案 1 :(得分:30)

要使用-compare:方法比较日期:

  

返回值如果:

     
      
  • 接收者和另一个日子   完全相同,    NSOrderedSame
  •   
  • 接收器稍晚   时间比另一个日期,    NSOrderedDescending
  •   
  • 接收器是   比其他日期早,   的 NSOrderedAscending 即可。
  •   

答案 2 :(得分:19)

怎么样......

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

答案 3 :(得分:12)

正如你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 ) {
    ...
}

答案 4 :(得分:2)

接受答案的Swift 2版本:

if firstDate.timeIntervalSinceDate(secondDate) > 0 {
    // firstDate is greater (further in the future) than secondDate
}

答案 5 :(得分:1)

if ([startDate compare:endDate] == NSOrderedAscending) {
        NSLog(@"startDate is EARLIER than endDate");
}

答案 6 :(得分:0)

我多年来一直在使用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