2016-05-25 16 views
20

Ich arbeite an der Entwicklung von ios und ich finde es wirklich schwer zu überprüfen, ob zwei NSDates vom selben Tag sind. Ich habe versucht, dieseWie man überprüft, ob zwei NSDates vom selben Tag sind

fetchDateList() 
    // Check date 
    let date = NSDate() 
    // setup date formatter 
    let dateFormatter = NSDateFormatter() 
    // set current time zone 
    dateFormatter.locale = NSLocale.currentLocale() 

    let latestDate = dataList[dataList.count-1].valueForKey("representDate") as! NSDate 
    //let newDate = dateFormatter.stringFromDate(date) 
    let diffDateComponent = NSCalendar.currentCalendar().components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day], fromDate: latestDate, toDate: date, options: NSCalendarOptions.init(rawValue: 0)) 
    print(diffDateComponent.day) 

zu verwenden, aber es überprüft nur, ob zwei NSDates einen Unterschied von 24 Stunden hat. Ich denke, es gibt einen Weg, es zum Laufen zu bringen, aber trotzdem möchte ich NSDate-Werte vor 2 Uhr morgens haben, um am Vortag gezählt zu werden, also brauche ich hier definitiv Hilfe. Vielen Dank!

Antwort

65

NSCalendar hat eine Methode, die genau das tut, was Sie wirklich wollen!

/* 
    This API compares the Days of the given dates, reporting them equal if they are in the same Day. 
*/ 
- (BOOL)isDate:(NSDate *)date1 inSameDayAsDate:(NSDate *)date2 NS_AVAILABLE(10_9, 8_0); 

So würden Sie es wie folgt verwendet werden:

[[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2]; 

Oder in Swift

Calendar.current.isDate(date1, inSameDayAs:date2) 
+1

Minor Update: In Swift 3.0 Xcode 8.2 Syntax:' if NSCalendar.current.isDate (date1, inSameDayAs: date2) == true) {// Mach dein Zeug} ' – KuboAndTwoStrings

+1

Es scheint nicht für bestimmte Daten wie' 2017-06-12T00: 00: 00.000Z' und '2017-06-12T23: 59: 59.999Z' ->" 23:59 zu arbeiten : 59 "fällt aus irgendeinem Grund in den nächsten Tag (meine Zeitzone ist +2 und 21:59:59 funktioniert gut). Scheint, etwas mit Zeitzonen zu tun, aber ich habe nicht herausgefunden, wie es funktioniert. –

+0

Ist das ein DST-Übergang? Wenn dieser Tag nur 23 Stunden hat. –

4

sollten Sie das Datum Komponenten vergleichen:

let date1 = NSDate(timeIntervalSinceNow: 0) 
let date2 = NSDate(timeIntervalSinceNow: 3600) 

let components1 = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: date1) 
let components2 = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: date2) 

if components1.year == components2.year && components1.month == components2.month && components1.day == components2.day { 
    print("same date") 
} else { 
    print("different date") 
} 

Oder kürzer:

let diff = Calendar.current.dateComponents([.day], from: self, to: date) 
if diff.day == 0 { 
    print("same day") 
} else { 
    print("different day") 
} 
+0

funktionierts für verschiedene Zeitzonen? – JoshJoshJosh

+2

Wenn andere Zeitzone, ersetzen Sie 'Komponenten' durch' componentsInTimeZone (_, fromDate: _) ' –

Verwandte Themen