比较 Swift 中的日期 2.1 升序与较早的相同?

Comparing Dates in Swift 2.1 Ascending is the Same as Earlier?

我在使用日期选择器时很困惑。如果我尝试像这样比较日期,较早日期的结果与相同日期的结果相同:

@IBAction func datePickerChanged() {

        let date = NSDate()
        if datePicker.date.compare(date) == NSComparisonResult.OrderedDescending {
            print("Date picked: \(datePicker.date) is later than current date: \(date)")
        } else if datePicker.date.compare(date) == NSComparisonResult.OrderedAscending {
            print("Date picked: \(datePicker.date) is earlier than current date: \(date)")
        } else if datePicker.date.compare(date) == NSComparisonResult.OrderedSame {
            print("Date picked: \(datePicker.date) is same as current date: \(date)")
        }

}

结果:

Date picked: 2015-11-11 18:29:40 +0000 is earlier than current date: 2015-11-12 18:29:43 +0000

Date picked: 2015-11-12 18:29:40 +0000 is earlier than current date: 2015-11-12 18:29:49 +0000

Date picked: 2015-11-13 18:29:40 +0000 is later than current date: 2015-11-12 18:29:54 +0000

卧槽?不,2015-11-12 不早于 2015-11-12... 一样。

对比无误。日期是一样的,但如果你看一下小时、分钟和秒,它们是不一样的,这会给你准确的结果。

如果你只想比较日期,你可以从它的日期组件(参见 NSDateComponents 文档)构建一个新日期(对于你想要比较的每个日期) - 只添加你想要检查的组件,这是年月日-然后做比较

编辑:Leo Dabus 指出您可以使用 NSCalendar 进行日期比较,它比创建新日期并以这种方式进行比较要灵活得多。

NSDate 不仅仅是一个 "date" 比较 - "time" 比较也是内置的。

如果你只是想比较天数,而不是时间,那么使用NSCalendar方法compareDate:toDate:toUnitGranularity:

if NSCalendar.currentCalendar().compareDate(datePicker.date, 
                                     toDate:date, 
                          toUnitGranularity:NSCalendarUnit.Day) == NSComparisonResult.OrderedDescending
{ ...
}

这是根据当地时区的日期边界进行比较的。