Ich versuche, die Differenz zwischen dem aktuellen Datum als NSDate()
und einem Datum aus einem PHP- time();
Aufruf zu ermitteln, zum Beispiel : NSDate(timeIntervalSinceReferenceDate: 1417147270)
. Wie kann ich den Zeitunterschied zwischen den beiden Daten ermitteln? Ich hätte gerne eine Funktion, die die beiden Daten vergleicht und if(seconds > 60)
dann Minuten, if(minutes > 60)
Stunden und zurückgibtif(hours > 24)
Tage und so weiter.
Wie soll ich das machen?
EDIT: Die aktuell akzeptierte Antwort hat genau das getan, was ich tun wollte. Ich empfehle es zur einfachen Verwendung, um die Zeit zwischen zwei Daten in der von der PHP- time()
Funktion verwendeten Form abzurufen . Wenn Sie mit PHP nicht besonders vertraut sind, ist dies die Zeit in Sekunden ab dem 1. Januar 1970. Dies ist für ein Backend in PHP von Vorteil. Wenn Sie möglicherweise ein Backend wie NodeJS verwenden, sollten Sie einige der anderen Optionen in Betracht ziehen, die Sie unten finden.
NSDateComponentsFormatter
. Es ist sehr konfigurierbar, sodass Sie entsprechend knappe Ergebnisse erzielen können (z.maximumUnitCount = 1
. B. ).Antworten:
Xcode 8.3 • Swift 3.1 oder höher
Mithilfe des Kalenders können Sie eine Erweiterung erstellen, mit der Sie Ihre Datumsberechnungen wie folgt durchführen können:
Verwenden des Formatierers für Datumskomponenten
quelle
.CalendarUnitSecond
Fehler'NSCalendarUnit.Type' does not have a member named 'CalendarUnitSecond'
, wissen Sie, wie man es löst?NSCalendarUnit
, implementiert alsreturn Calendar.current().components(unit, from: date, to: self, options: [])?. valueForComponent(unit)
(auf iOS> 8).DateComponentsFormatter
SO viel besser ist als auf lange Sicht, sollte dies wirklich ganz oben auf der Antwort stehen.Wenn jemand alle Zeiteinheiten anzeigen muss, z. B. "Stunden Minuten Sekunden", nicht nur "Stunden". Angenommen, der Zeitunterschied zwischen zwei Daten beträgt 1 Stunde 59 Minuten 20 Sekunden. Diese Funktion zeigt "1h 59m 20s" an.
Hier ist mein Objective-C-Code:
In Swift 3+:
quelle
Du fragst:
Ich gehe davon aus, dass Sie versuchen, eine Zeichenfolgendarstellung der zwischen zwei Daten verstrichenen Zeit zu erstellen. Anstatt dafür Ihren eigenen Code zu schreiben, hat Apple bereits eine Klasse, die genau dafür ausgelegt ist. Das heißt, die Verwendung
DateComponentsFormatter
, eingestelltallowedUnits
, was auch immer Wert Sinn , um Ihre Anwendung zu machen, setzenunitsStyle
, was auch immer Sie wollen (zB.full
), und dann rufenstring(from:to:)
.ZB in Swift 3:
Dadurch wird auch die für das betreffende Gerät geeignete Zeichenfolge lokalisiert.
Oder in Swift 2.3:
Wenn Sie nach den tatsächlichen numerischen Werten suchen, verwenden Sie einfach
dateComponents
. ZB in Swift 3:Oder in Swift 2.3:
quelle
kombinierte Erweiterung + DateComponentsFormatter aus der Antwort von @ leo-dabus
Xcode 8.3 • Swift 3.1
quelle
quelle
Ich habe Leo Dabus 'Antwort eine "lange" Version hinzugefügt, falls Sie eine Zeichenfolge haben möchten, die so etwas wie "vor 2 Wochen" anstelle von "2w" sagt ...
quelle
-> Verwenden Sie diese Option, um die Zeitlücke zwischen zwei Daten in Swift (mit zwei Zeichenfolgen) zu ermitteln.
quelle
Leicht modifizierter Code für Swift 3.0
quelle
Swift 5.1 • iOS 13
Sie können RelativeDateFormatter verwenden , das von Apple in iOS 13 eingeführt wurde.
Siehe Anzeigen eines relativen Datums und einer relativen Uhrzeit mithilfe von RelativeDateTimeFormatter .
quelle
Wenn Sie die genaue Tageszahl zwischen zwei Daten ermitteln möchten, können Sie dieses Problem folgendermaßen umgehen:
quelle
Mit Swift 3 können Sie je nach Bedarf eine der beiden folgenden Möglichkeiten wählen, um Ihr Problem zu lösen.
1. Zeigen Sie dem Benutzer die Differenz zwischen zwei Daten an
Mit a können Sie
DateComponentsFormatter
Zeichenfolgen für die Benutzeroberfläche Ihrer App erstellen.DateComponentsFormatter
hat einemaximumUnitCount
Eigenschaft mit der folgenden Deklaration:Wenn Sie den
maximumUnitCount
Wert auf setzen1
, wird garantiert, dass der Unterschied nur in einem angezeigt wirdDateComponentsFormatter
Einheit (Jahre, Monate, Tage, Stunden oder Minuten).Der folgende Spielplatzcode zeigt, wie der Unterschied zwischen zwei Daten angezeigt wird:
Beachten Sie, dass
DateComponentsFormatter
das Ergebnis aufgerundet wird. Daher wird eine Differenz von 4 Stunden und 30 Minuten als 5 Stunden angezeigt .Wenn Sie diesen Vorgang wiederholen müssen, können Sie Ihren Code umgestalten:
2. Ermitteln Sie den Unterschied zwischen zwei Daten ohne Formatierung
Wenn Sie dem Benutzer den Unterschied zwischen zwei Daten nicht formatieren müssen, können Sie ihn verwenden
Calendar
.Calendar
hat eine MethodedateComponents(_:from:to:)
mit der folgenden Deklaration:Der unten verwendete Spielplatzcode
dateComponents(_:from:to:)
zeigt, wie Sie die Differenz zwischen zwei Daten abrufen können, indem Sie die Differenz in nur einem TypCalendar.Component
(Jahre, Monate, Tage, Stunden oder Minuten) zurückgeben.Wenn Sie diesen Vorgang wiederholen müssen, können Sie Ihren Code umgestalten:
quelle
In Swift 2.2
quelle
Eine kleine Ergänzung zu Leo Dabus 'Antwort, um die Pluralversionen bereitzustellen und menschlicher lesbar zu sein.
Swift 3
quelle
Dies ist die kürzere Version: Grundsätzlich versuche ich, den Unterschied zwischen dem Post-Zeitstempel und dem
Date()
Jetzt zu ermitteln.quelle
Hier ist meine Antwort auf die obigen Swift 3-Antworten. Dies ist ab November 2016 aktuell. Die Xcode-Version war 8.2 Beta (8C23). Verwendete einige der oben genannten Vorschläge von Sagar und Emin und musste manchmal Xcode automatisch vervollständigen lassen, um die Syntax vorzuschlagen. Es schien, als hätte sich die Syntax wirklich auf diese Beta-Version geändert.
buyDate
Ich habe von einem DatePicker bekommen:quelle
NSCalendar
Swift 3 nicht wirklich verwendenCalendar
. Das ist also vereinfachtlet calendar = Calendar.current
. Und danncomponents
würde aussehen wie :let components = calendar.dateComponents([.day], from: date1, to: date2)
.Für XCode Version 8.3.3 und Swift 3.0:
quelle
Einige Ergänzungen in jose920405 antworten, um es mit Swift 3.0 und höher kompatibel zu machen
quelle
Verwenden Sie diesen Code:
Ausgabe ist: Ergebnis: 10 Jahre 1 Monate und 18 Tage
quelle
Verwenden:
quelle