Ich versuche, NSDate heute, gestern, diese Woche, letzte Woche, diesen Monat, letzten Monat Variablen zum Vergleich bereit zu machen, damit Header in UITableViews titleForHeaderInSection hinzugefügt werden können
Was ich möchte, wird manuell im folgenden Code für das Datum 2009-12-11 ausgeführt
NSDate *today = [NSDate dateWithString:@"2009-12-11 00:00:00 +0000"];
NSDate *yesterday = [NSDate dateWithString:@"2009-12-10 00:00:00 +0000"];
NSDate *thisWeek = [NSDate dateWithString:@"2009-12-06 00:00:00 +0000"];
NSDate *lastWeek = [NSDate dateWithString:@"2009-11-30 00:00:00 +0000"];
NSDate *thisMonth = [NSDate dateWithString:@"2009-12-01 00:00:00 +0000"];
NSDate *lastMonth = [NSDate dateWithString:@"2009-11-01 00:00:00 +0000"];
iphone
time
comparison
nsdate
hasnat
quelle
quelle
NSCalendar
wenn Genauigkeit erforderlich ist.Könnte ein besserer Weg sein, dies zu schreiben, aber hier, was ich auf Bens NSCalendar-Vorschlag und die Arbeit von dort an NSDateComponents kam
quelle
fromDate:[[NSDate alloc] init]
Bits verlieren Sie überall Speicher .NSDateComponents ist heute schön zu bekommen:
Dadurch wird ein NSDate mit nur Jahr, Monat und Datum erstellt:
Um gestern usw. zu bekommen, können Sie es mit NSDateComponents berechnen:
quelle
(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
sollte sein(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
.quelle
DateThisWeek
hat das Festlegen des Wochentags keine Auswirkungen auf das NSDate ...Swift 4.2
Bitte beachten Sie, dass Datumskomponenten optional sind.
quelle
Die anderen Antworten haben bei mir einfach nicht funktioniert (möglicherweise aufgrund meiner Zeitzone). So mache ich es:
quelle
Wenn Sie iOS 10+ oder MacOS 10.12+ verwenden, können Sie diese beiden
Calendar
Methoden verwenden, um dies ordnungsgemäß durchzuführen .func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?
( docs )func dateInterval(of component: Calendar.Component, for date: Date) -> DateInterval?
( docs )Hier ist ein Beispiel für die Verwendung dieser Methoden in Swift 3 sowie die Ausgabe der Spielplätze in meiner Zeitzone.
Bonus: Mit dem
DateInterval
s können Sie testen, ob ein Datum in diesen Bereich fällt. Fortsetzung von oben:quelle
yesterday
29. April und dernow
28. April?quelle
Das in diesem Projekt enthaltene THCalendarInfo-Objekt gefällt mir sehr gut:
http://github.com/jaredholdcroft/kcalendar
Ich kann das Original nicht ganz finden. Mit diesem Objekt können Sie zu einem vorherigen Tag, dem Beginn einer Woche, dem Beginn eines Monats, dem Wochentag, dem Monatstag usw. usw. wechseln.
quelle
quelle
[NSDate date]
?Dies dient zur Überprüfung des Datums in diesem Monat oder nicht
Und zweitens ändern Sie nur den Typ der Kalendereinheit für schwache wie diese
Ich hoffe das ist hilfreich für jemanden Danke.
quelle
Ich antwortete eine ähnliche Frage bereits und ist hier, warum meine Antwort ist besser:
quelle