2015-08-23 82 views
2

我想比较两个NSDates,了解它们是否在同一天。这些是两个日期(第二个始终是当前日期,NSDate()):比较两个NSDates日,月,年整数

2015-08-23 22:00:00 +0000 2015-08-23 19:13:45 +0000

看来很明显,日期是在同一天,因为23 = 23。但我似乎无法在代码中建立此。我想:

1)

let date = tripObject["tripDate"] as! NSDate 
let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd" 
let str = dateFormatter.stringFromDate(date) 

let date2 = NSDate() 
let dateFormatter2 = NSDateFormatter() 
dateFormatter2.dateFormat = "yyyy-MM-dd" 
let str2 = dateFormatter2.stringFromDate(date2) 

println(". \(str) and \(str2) .") 

这给出了2015年8月24日和2015年8月23日

2)

let dateComponents = NSCalendar.currentCalendar().components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: tripObject["tripDate"] as! NSDate) 
let dateComponents2 = NSCalendar.currentCalendar().components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: NSDate()) 

这给出了不同的一天的组件。

3)

if NSCalendar.currentCalendar().isDate(firstDate!, inSameDayAsDate: secondDate!){ 

4)

if NSCalendar.currentCalendar().isDateInToday(the NSDate) { 

两个3和4失败。

我完全失去了,有什么想法?

+0

使用NSCalendar.currentCalendar()。startOfDayForDate(date)获取一天中的开始日期和使用比较方法 –

+0

你是什么意思?这几天的时间是几点? – Fogmeister

回答

8

NSCalendar有一个方法isDate:equalToDate:toUnitGranularity:,这不正是你需要的

date1date2是要比较的NSDate情况下,结果是Bool

let calendar = NSCalendar.currentCalendar() 
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0) 
let datesAreInTheSameDay = calendar.isDate(date1, equalToDate: date2, toUnitGranularity: .CalendarUnitDay | .CalendarUnitMonth | .CalendarUnitYear) 

斯威夫特2:

let datesAreInTheSameDay = calendar.isDate(date1, equalToDate: date2, toUnitGranularity: [.Day, .Month, .Year]) 

斯威夫特3:

var calendar = Calendar.current 
calendar.timeZone = TimeZone(secondsFromGMT: 0)! 
let datesAreInTheSameDay = calendar.isDate(date1, equalTo: date2, toGranularity:.day) 
+0

我试过了第一行,它仍然不起作用..似乎无论我做什么第23天变成了24 – Alessandro

+0

Date1:​​2015-08-23 22:00:00 +0000,Date2:2015 -08-23 20:56:30 +0000 – Alessandro

+0

该代码应该工作,检查日期的时区 – vadian

1

您可以将两个日期开始新的一天,然后使用NSDatecompare方法比较他们

let date1StartOfTheDay = NSCalendar.currentCalendar().startOfDayForDate(date) 
    let date2StartOfTheDay = NSCalendar.currentCalendar().startOfDayForDate(date2 
    if date1StartOfTheDay.compare(date2StartOfTheDay) == OrderedSame 
    { 
     //same dates 
    } 
+0

试过这个,给。 2015-08-23 22:00:00 +0000和2015-08-22 22:00:00 +0000。 08-22是date2或NSDate(),即使今天是23日。如果我只是打印NSDate()它给出2015-08-23 19:46:46 +0000 – Alessandro

+0

可以打印日期,看看它打印什么,我认为它可能是时区问题 –

+0

date = 2015-08-23 22: 00:00 +0000 – Alessandro

0

你可以使用这个扩展:

extension NSDate { 

    func isEqualToDate2(dateToCompare : NSDate) -> Bool { 
     //Declare Variables 
     var isEqualTo = false 

     //Compare Values 
     if self.compare(dateToCompare) == NSComparisonResult.OrderedSame { 
      isEqualTo = true 
     } 

     //Return Result 
     return isEqualTo 
    } 

} 

,如:

if date1.isEqualToDate2(date2) { 
... 
}