Wie überprüfe ich, ob ein NSDate
zu heute gehört?
Ich habe es mit den ersten 10 Zeichen von überprüft [aDate description]
. [[aDate description] substringToIndex:10]
Gibt einen String wie folgt zurück, "YYYY-MM-DD"
also habe ich den String mit dem von zurückgegebenen String verglichen [[[NSDate date] description] substringToIndex:10]
.
Gibt es eine schnellere und / oder sauberere Möglichkeit zur Überprüfung?
Vielen Dank.
ios
objective-c
cocoa-touch
nsdate
nscalendar
Seunghoon
quelle
quelle
Antworten:
In macOS 10.9+ und iOS 8+ gibt es eine Methode in NSCalendar / Calendar, die genau dies tut!
Also würdest du es einfach tun
Ziel c:
Swift 3:
quelle
Sie können Datumskomponenten vergleichen:
Bearbeiten:
Ich mag die Methode von stefan mehr, ich denke, sie sorgt für eine sauberere und verständlichere if-Aussage:
Chris, ich habe deinen Vorschlag aufgenommen. Ich musste nachsehen, was Ära war, also unterscheidet es für alle anderen, die es nicht wissen, zwischen BC und AD. Dies ist für die meisten Menschen wahrscheinlich unnötig, aber es ist leicht zu überprüfen und bietet eine gewisse Sicherheit, daher habe ich es aufgenommen. Wenn Sie auf Geschwindigkeit setzen, ist dies wahrscheinlich sowieso keine gute Methode.
HINWEIS Wie bei vielen Antworten auf SO ist dies nach 7 Jahren völlig veraltet. In Swift jetzt einfach verwenden
.isDateInToday
quelle
Dies ist ein Ableger Ihrer Frage, aber wenn Sie ein NSDate mit "Heute" oder "Gestern" drucken möchten, verwenden Sie die Funktion
für NSDateFormatter
quelle
Ich würde versuchen, das heutige Datum auf Mitternacht und das zweite Datum auf Mitternacht zu normalisieren und dann zu vergleichen, ob es dasselbe NSDate ist.
Anhand eines Apple-Beispiels können Sie das heutige Datum auf Mitternacht normalisieren. Machen Sie dasselbe für das zweite Datum und vergleichen Sie:
quelle
Working Swift 3 & 4 Erweiterung des Vorschlags von Catfish_Man:
quelle
Sie müssen nicht mit Komponenten, Epochen und anderen Dingen jonglieren.
NSCalendar bietet eine Methode, um den Beginn einer bestimmten Zeiteinheit für ein vorhandenes Datum abzurufen.
Dieser Code beginnt am heutigen Tag und an einem anderen Datum und vergleicht das. Wenn es ausgewertet wird,
NSOrderedSame
sind beide Daten am selben Tag - also heute.quelle
Arbeitete für mich an Swift 2.0
quelle
Schnelle Version der besten Antwort:
quelle
Weitere Informationen finden Sie im Dokumentationseintrag von Apple mit dem Titel "Durchführen von Kalenderberechnungen" [Link] .
Listing 13 auf dieser Seite schlägt vor, dass Sie zur Bestimmung der Anzahl der Mitternächte zwischen den Tagen Folgendes verwenden:
Sie können dann mithilfe dieser Methode feststellen, ob zwei Tage gleich sind, und prüfen, ob 0 zurückgegeben wird oder nicht.
quelle
Sie können auch das Zeitintervall zwischen dem Datum und dem aktuellen Datum überprüfen:
Dadurch erhalten Sie das Zeitintervall in Sekunden zwischen myDate und dem aktuellen Datum / der aktuellen Uhrzeit.
Link .
Bearbeiten: Hinweis an alle: Mir ist klar, dass [myDate timeIntervalSinceNow] nicht eindeutig bestimmt, ob myDate heute ist.
Ich lasse diese Antwort so, wie sie ist. Wenn jemand nach etwas Ähnlichem sucht und [myDate timeIntervalSinceNow] nützlich ist, kann er es hier finden.
quelle
timeIntervalSinceNow
da dies in vielen anderen Beiträgen behandelt wird. Auch die Behandlung des Tagesvergleichs mit der Überprüfung auf Sekunden fördert die fehleranfällige Teilung durch 86400.Schnelle Erweiterung basierend auf den besten Antworten:
quelle
Wenn Sie viele dieser Datumsvergleiche haben, nehmen die Anrufe
calendar:components:fromDate
viel Zeit in Anspruch. Nach einigen Profilen, die ich erstellt habe, scheinen sie ziemlich teuer zu sein.Angenommen, Sie versuchen zu bestimmen, welche Daten aus einer Reihe von Daten
NSArray *datesToCompare
beispielsweise am selben Tag wie ein bestimmter Tag liegenNSDate *baseDate
, dann können Sie Folgendes verwenden (teilweise angepasst aus einer Antwort oben):Ausgabe:
quelle
Es gibt einen einfacheren Weg als viele der oben genannten Antworten!
quelle
Dies könnte wahrscheinlich als NSDate-Kategorie überarbeitet werden, aber ich habe verwendet:
(Der Vergleich der beiden Datumszeichenfolgen wie in der ursprünglichen Frage fühlt sich jedoch fast "sauberer" an.)
quelle
comps
Sie beim Erstellen Stunden, Minuten und Sekunden einbeziehen, wenn Sie sie sofort auf Null setzen? Ich denke auch, dass Sie die Ära einbeziehen müssen.für iOS7 und früher:
quelle
Überprüfen Sie unsere Erica Sadun großartig
NSDate extension
. Sehr einfach zu bedienen. Fein es hier:http://github.com/erica/NSDate-Extensions
Es ist bereits in diesem Beitrag enthalten: https://stackoverflow.com/a/4052798/362310
quelle
Die richtige und sichere Lösung ohne gewaltsames Auspacken unter Swift 2.2 und vor iOS 8:
quelle
Hier ist meine 2-Cent-Antwort, die auf der akzeptierten Antwort aufbaut, aber auch die neuere API unterstützt. Hinweis: Ich verwende den Gregorianischen Kalender, da die meisten Zeitstempel GMT sind, aber ändern Sie Ihren nach Belieben
quelle
Meine Lösung besteht darin, zu berechnen, wie viele Tage seit 1970 nach Division vergangen sind, und den ganzzahligen Teil zu vergleichen
quelle
quelle