2016-05-25 5 views
20

Pracuję nad rozwojem ios i naprawdę ciężko jest sprawdzić, czy dwa dyski NSD są od tego samego dnia. Spróbowałem użyć tegoJak sprawdzić, czy dwa dyski NSD są od tego samego dnia?

ale po prostu sprawdza, czy dwa NSDates ma różnica 24 godzin. Myślę, że jest sposób, aby to zadziałało, ale mimo to, chciałbym mieć wartości NSDate przed 2.00 nad ranem, aby być wliczonym do poprzedniego dnia, więc zdecydowanie potrzebuję pomocy. Dzięki!

Odpowiedz

65

NSCalendar ma metody, która robi dokładnie to, co chcesz w rzeczywistości!

/* 
    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); 

Więc chcesz go używać tak:

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

albo w Swift

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

Drobna aktualizacja: W Swift 3.0 Xcode 8.2 Składnia:' if NSCalendar.current.isDate (date1, inSameDayAs: date2) == true) {// zrób swoje rzeczy} ' – KuboAndTwoStrings

+1

Wygląda na to, że nie działa w określonych datach, takich jak' 2017-06-12T00: 00: 00.000Z' i '2017-06-12T23: 59: 59.999Z' ->" 23:59 : 59 "wpada na następny dzień z jakiegoś powodu (moja strefa czasowa to +2, a 21:59:59 działa bez zarzutu). Wydaje się, że robisz coś ze strefami czasowymi, ale nie wiedziałem, jak to zrobić. –

+0

Czy to jest przejście DST? Jeśli tak, ten dzień może mieć tylko 23 godziny. –

4

Należy porównać komponentów Data:

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

lub krótszy:

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

robi tej pracy w różnych strefach czasowych? – JoshJoshJosh

+2

Jeśli inna strefa czasowa, zamień 'components' na' componentsInTimeZone (_, fromDate: _) ' –

Powiązane problemy