使用日期选择器时我很困惑。如果我尝试比较这样的日期,那么早期日期的结果与它们相同的日期相同:
@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 ...它是一样的。
答案 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
{ ...
}
根据当地时区的日期边界进行比较。