Ich arbeite an einer App, bei der das Fälligkeitsdatum für Hausaufgaben überprüft werden muss. Ich möchte wissen, ob ein Fälligkeitsdatum innerhalb der nächsten Woche liegt und ob es dann eine Aktion ausführt.
Die meiste Dokumentation, die ich finden konnte, befindet sich in Objective-C und ich kann nicht herausfinden, wie es in Swift geht. Danke für die Hilfe!!
153
Date
Klasse. Es ist überbrücktNSDate
, aber es heißtDate
.Antworten:
Ich verwende gerne Erweiterungen, um den Code besser lesbar zu machen. Hier sind einige NSDate-Erweiterungen, mit denen Sie Ihren Code bereinigen und leicht verständlich machen können. Ich habe dies in eine sharedCode.swift-Datei eingefügt:
Wenn Sie so etwas tun können:
quelle
return self.compare(dateToCompare) == NSComparisonResult.OrderedDescending
NSDateComponents
gibt es. Es gibt viele Grenzfälle , die nicht ordnungsgemäß zu behandeln sein werden , und es macht keinen Sinn , nicht konform hinzufügenComparable
zuNSDate
. Ich würde empfehlen, Johns Lösung zu verwenden .date1 < date2
Wenn Sie unterstützen möchten
==
,<
,>
,<=
, oder>=
fürNSDate
s, müssen Sie ihn nur irgendwo erklären:quelle
Comparable
ist ein Nachkomme desEquatable
Protokolls, daher sollten Sie nicht die Konformität mit beiden deklarieren müssen.==
,<
,>
etc., werden Sie ein Ergebnis des Vergleichs ihrer Adresse im Speicher bekommen, nicht den Vergleich von ihrem tatsächlichen Wert. In Swift werden sie immer noch als Referenzen behandelt. Ich denke, die Wahl bestand darin, entweder (1) By-Pointer-Vergleiche wie in ObjC beizubehalten oder (2) Verwirrung zu beseitigen, indem keine Implementierung für Vergleiche bereitgestellt wird.Array.maxElement()
, dass usw. automatisch für Arrays von NSDates verfügbar sind.So vergleichen Sie zwei NSDates in Swift. Ich habe es gerade auf Xcodes Spielplatz getestet:
So überprüfen Sie, ob ein Datum
dueDate
innerhalb einer Woche liegt:quelle
Ich habe es immer in einer Zeile gemacht:
Im
if
Block noch lesbarquelle
In Swift3 implementiert die
Date
Struktur inFoundation
jetzt dasComparable
Protokoll. Die bisherigen Swift2-NSDate
Ansätze werden also von Swift3 abgelöstDate
.Hinweis ...
In swift3,
Date
iststruct
, es bedeutet , dass esvalue type
.NSDate
istclass
, es istreference type
.quelle
quelle
Wenn Sie Daten mit der Granularität (nur am selben Tag oder Jahr usw.) auf Swift 3 vergleichen möchten.
Für andere Kalendervergleiche ändern Sie .day in;
.Jahr .Monat .Tag .Stunde .Minute .Sekunde
quelle
Swift implementiert bereits einen Datumsvergleich. Verwenden Sie einfach Datum1> Datum2 und so weiter.
quelle
In Swift 3 ist Datum vergleichbar, sodass wir Daten wie vergleichen können
oder alternativ
Besserer Weg, um
extension
am Datum zu erstellenVerwendung
let isGreater = date1.isGreater(than: date2)
quelle
Diese Funktion hat bei mir funktioniert, um zu vergleichen, ob ein Datum (startDate) nach dem endDate liegt, wobei beide als NSDate-Variablen definiert wurden:
quelle
Umsetzung in
Swift
quelle
quelle
dateAdded ist eine NSDate-Variable in meinem Objekt
quelle
Wir haben ein Szenario, um die aktuelle Zeit s / w zweimal (zwei Daten) zu überprüfen. Zum Beispiel möchte ich die aktuelle Zeit zwischen der Öffnungszeit der Klinik (Krankenhaus) und der Schließzeit überprüfen.
Verwenden Sie den einfachen Code.
quelle
Für Swift 3 können Sie die folgende Funktion verwenden, um zwischen zwei Daten zu vergleichen.
toGranularity kann entsprechend den Einschränkungen geändert werden, auf die Sie Ihren Vergleich anwenden möchten.
quelle
SashaZ erweitern
Schnelles iOS 8 und höher Wenn Sie mehr als nur größere oder kleinere Datumsvergleiche benötigen. Zum Beispiel ist es am selben Tag oder am vorherigen Tag, ...
Hinweis: Vergessen Sie niemals die Zeitzone. Die Kalender-Zeitzone hat eine Standardeinstellung. Wenn Ihnen die Standardeinstellung nicht gefällt, müssen Sie die Zeitzone selbst festlegen. Um zu wissen, welcher Tag heute ist, müssen Sie wissen, in welcher Zeitzone Sie fragen.
Verwenden Sie es so:
Ein komplexeres Beispiel. Suchen und filtern Sie alle Daten in einem Array, die vom selben Tag wie "findThisDay" stammen:
quelle