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);
EDYTOWAĆ:
Pamiętaj, że NSDate
obiekty reprezentują dokładne momenty czasu, nie mają żadnych skojarzonych informacji o strefie czasowej. Kiedy konwertujesz ciąg znaków na datę za pomocą np. An NSDateFormatter
, NSDateFormatter
konwertuje czas ze skonfigurowanej strefy czasowej. W związku z tym liczba sekund między dwoma NSDate
obiektami zawsze będzie niezależna od strefy czasowej.
Ponadto, dokumentacja ta określa, że implementacja czasu Cocoa nie uwzględnia sekund przestępnych, więc jeśli potrzebujesz takiej dokładności, będziesz musiał rzucić własną implementację.
cocoa
acocoa-touch
więc nie, więc ta odpowiedź dotyczy tylko Mac OS X.Możesz użyć czegoś takiego:
Uważam, że ta metoda uwzględnia sytuacje, takie jak daty obejmujące zmianę czasu letniego.
źródło
NSDate
obiekty są już niezależne od strefy czasowej. Informacje o strefie czasowej są usuwane podczas analizowania dat np.NSDateFormatter
, AbyNSDate
obiekty reprezentowały dokładne momenty w czasie. Dlatego jeśli już maszstartDate
iendDate
, te dwa obiekty będą oddalone od siebie o x sekund. Strefy czasowe nie będą miały z tym nic wspólnego.gdzie
date1
idate2
sąNSDate
.Zwróć również uwagę na definicję
NSTimeInterval
:źródło
Sprawdź to. Dba o czas letni, rok przestępny, ponieważ do obliczeń używał kalendarza iOS.Możesz zmienić ciąg i warunki, aby zawierały minuty z godzinami i dniami.
źródło
Dzięki Swift 5 i iOS 12, w zależności od potrzeb, możesz użyć jednego z dwóch poniższych sposobów, aby znaleźć różnicę między dwiema datami w dniach.
# 1. Korzystanie
Calendar
zdateComponents(_:from:to:)
metody# 2. Korzystanie
DateComponentsFormatter
zstring(from:to:)
metodyźródło
Swift 4
Spróbuj tego i zobacz (zakres dat ze stringiem):
Szybki 3
źródło
Możesz znaleźć różnicę, przeliczając datę w sekundach i biorąc dla tego przedział czasu od 1970 r., A następnie możesz znaleźć różnicę między dwiema datami.
źródło
Aby znaleźć różnicę, musisz uzyskać aktualną datę i datę w przyszłości. W poniższym przypadku użyłem 2 dni jako przykład przyszłej daty. Obliczone przez:
2 days
*24 hours
*60 minutes
*60 seconds
. Oczekujemy, że liczba sekund w ciągu 2 dni wyniesie 172 800.źródło