NSDate *date1 = [NSDate dateWithString:@"2010-01-01 00:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2010-02-03 00:00:00 +0000"];
NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];
int numberOfDays = secondsBetween / 86400;
NSLog(@"There are %d days in between the two dates.", numberOfDays);
BEARBEITEN:
Denken Sie daran, dass NSDate
Objekte exakte Zeitmomente darstellen und keine Zeitzoneninformationen zugeordnet sind. Wenn Sie eine Zeichenfolge in ein Datum konvertieren mit einem beispielsweise NSDateFormatter
, die NSDateFormatter
Konvertiten der Zeit von der konfigurierten Zeitzone. Daher NSDate
wird immer die Anzahl der Sekunden zwischen zwei Objekten angegeben zeitzonenunabhängig.
Darüber hinaus wird in dieser Dokumentation angegeben, dass die Implementierung der Zeit durch Cocoa keine Schaltsekunden berücksichtigt. Wenn Sie also eine solche Genauigkeit benötigen, müssen Sie Ihre eigene Implementierung ausführen.
cocoa
und nichtcocoa-touch
so, dass diese Antwort nur für Mac OS X gilt.Möglicherweise möchten Sie Folgendes verwenden:
Ich glaube, diese Methode berücksichtigt Situationen wie Daten, die eine Änderung der Sommerzeit umfassen.
quelle
NSDate
Objekte sind bereits zeitzonenunabhängig. Die Zeitzoneninformationen werden entfernt, wenn Daten mit z. B. analysiert werdenNSDateFormatter
, sodassNSDate
Objekte genaue Zeitpunkte darstellen. Wenn Sie also bereitsstartDate
und habenendDate
, sind diese beiden Objekte x Sekunden voneinander entfernt. Zeitzonen haben nichts damit zu tun.wo
date1
unddate2
sindNSDate
.Beachten Sie auch die Definition von
NSTimeInterval
:quelle
Kasse dies aus. Es kümmert sich um die Sommerzeit und das Schaltjahr, da der iOS-Kalender zur Berechnung verwendet wurde. Sie können die Zeichenfolge und die Bedingungen so ändern, dass sie Minuten mit Stunden und Tagen enthalten.
quelle
Mit Swift 5 und iOS 12 können Sie je nach Bedarf eine der beiden folgenden Methoden verwenden, um den Unterschied zwischen zwei Daten in Tagen zu ermitteln.
# 1. Mit
Calendar
derdateComponents(_:from:to:)
Methode von# 2. Mit
DateComponentsFormatter
derstring(from:to:)
Methode vonquelle
Swift 4
Versuchen Sie dies und sehen Sie (Datumsbereich mit String):
Swift 3
quelle
Sie können den Unterschied ermitteln, indem Sie das Datum in Sekunden umrechnen und dafür das Zeitintervall seit 1970 verwenden. Anschließend können Sie den Unterschied zwischen zwei Datumsangaben ermitteln.
quelle
Um den Unterschied zu ermitteln, müssen Sie das aktuelle Datum und das Datum in der Zukunft ermitteln. Im folgenden Fall habe ich 2 Tage als Beispiel für das zukünftige Datum verwendet. Berechnet von:
2 days
*24 hours
*60 minutes
*60 seconds
. Wir erwarten, dass die Anzahl der Sekunden in 2 Tagen 172.800 beträgt.quelle