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

时间:2015-11-12 18:33:57

标签: swift nsdate uidatepicker

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

@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)")
        }

}

结果:

  

选择日期:2015-11-11 18:29:40 +0000早于当前日期:   2015-11-12 18:29:43 +0000

     

选择日期:2015-11-12 18:29:40 +0000早于当前日期:   2015-11-12 18:29:49 +0000

     

选择日期:2015-11-13 18:29:40 +0000晚于当前日期:   2015-11-12 18:29:54 +0000

WTF?不,2015-11-12不早于2015-11-12 ...它是一样的。

2 个答案:

答案 0 :(得分:3)

比较都是正确的。这一天是相同的,但如果你看一下小时,分钟和秒,它们就不一样了,这给你准确的结果。

如果您只想比较天数,可以从其日期组件构建一个新日期(对于您要比较的每个日期)(请参阅NSDateComponents文档) - 仅添加要检查的组件,这些是年,月和日 - 然后进行比较。

编辑:Leo Dabus指出你可以使用NSCalendar进行日期比较,它比创建新日期和比较那样光滑。

NSDate不仅仅是一个" date"比较 - "时间"比较也建立在那里。

答案 1 :(得分:0)

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

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

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