webentwicklung-frage-antwort-db.com.de

Überprüfen Sie, ob das Datum vor dem aktuellen Datum liegt (Swift)

Ich möchte prüfen, ob ein NSDate vor (in der Vergangenheit) liegt, indem ich es mit dem aktuellen Datum vergleiche. Wie würde ich das machen?

Vielen Dank

31
Tom Coomer

Ich finde die beforeDate-Methode.

if date1.earlierDate(date2).isEqualToDate(date1)  {
     print("date1 is earlier than date2")
}

Sie haben auch das spätere Datum

Switf3:

if date1 < date2  {
     print("date1 is earlier than date2")
}
80
Kibo

Es gibt einen einfachen Weg, dies zu tun. (Swift 3 ist noch einfacher, überprüfen Sie am Ende der Antwort)

SWIFT-Code:

if myDate.timeIntervalSinceNow.isSignMinus {
    //myDate is earlier than Now (date and time)
} else {
    //myDate is equal or after than Now (date and time)
}

Wenn Sie ein Datum ohne Uhrzeit vergleichen möchten ("MM/TT/JJJJ").

SWIFT-Code:

//Ref date
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy"
let someDate = dateFormatter.dateFromString("03/10/2015")

//Get calendar
let calendar = NSCalendar.currentCalendar()

//Get just MM/dd/yyyy from current date
let flags = NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitYear
let components = calendar.components(flags, fromDate: NSDate())

//Convert to NSDate
let today = calendar.dateFromComponents(components)

if someDate!.timeIntervalSinceDate(today!).isSignMinus {
    //someDate is berofe than today
} else {
    //someDate is equal or after than today
} 

Apple-Dokumente Link hier .

Edit 1: Wichtig

Aus Swift 3 Migrationshinweise :

Der Migrator ist konservativ, aber es gibt einige Verwendungsmöglichkeiten von NSDate, die in Swift 3 besser dargestellt werden:
(x as NSDate).earlierDate(y) kann in x < y ? x : y geändert werden
(x as NSDate).laterDate(y) kann in x < y ? y : x geändert werden

In Swift 3 können Sie Vergleichsoperatoren verwenden.

32
Vagner

Wenn Sie ein Datum mit jetzt vergleichen müssen, ohne ein neues Date-Objekt zu erstellen, können Sie dies einfach in Swift 3 verwenden:

if (futureDate.timeIntervalSinceNow.sign == .plus) {
    // date is in future
}

und 

if (dateInPast.timeIntervalSinceNow.sign == .minus) {
    // date is in past
}
17
192kb

Sie können NSDate erweitern, um den Protokollen Equatable und Comparable zu entsprechen. Dies sind Vergleichsprotokolle in Swift und ermöglichen es den bekannten Vergleichsoperatoren (==, <,> usw.), mit Datumsangaben zu arbeiten. Fügen Sie das Folgende in eine entsprechend benannte Datei ein, z. NSDate+Comparison.Swift in Ihrem Projekt:

extension NSDate: Equatable {}
extension NSDate: Comparable {}

public func ==(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.timeIntervalSince1970 == rhs.timeIntervalSince1970
}

public func <(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.timeIntervalSince1970 < rhs.timeIntervalSince1970
}

Jetzt können Sie mit Standardvergleichsoperatoren überprüfen, ob ein Datum vor dem anderen liegt.

let date1 = NSDate(timeIntervalSince1970: 30)
let date2 = NSDate()

if date1 < date2 {
    print("ok")
}

Informationen zu Erweiterungen in Swift finden Sie unter hier . Informationen zu den gleichwertigen und vergleichbaren Protokollen finden Sie unter hier und hier

Note: In diesem Fall erstellen wir keine benutzerdefinierten Operatoren, sondern erweitern lediglich einen vorhandenen Typ, um vorhandene Operatoren zu unterstützen.

9
mustafa

Sie müssen NSDate hier nicht erweitern, verwenden Sie einfach "compare", wie in docs dargestellt.

Zum Beispiel in Swift:

if currentDate.compare(myDate) == NSComparisonResult.OrderedDescending {
    println("myDate is earlier than currentDate")
}
8
Nick Barr

In Swift 4 können Sie diesen Code verwenden

if endDate.timeIntervalSince(startDate).sign == FloatingPointSign.minus {
    // endDate is in past
}
1
Jack Daniel

In Swift5

    let nextDay = Calendar.current.date(byAdding: .day, value: -1, to: Date())
    let toDay = Date()
    print(toDay)
    print(nextDay!)

    if nextDay! < toDay  {
        print("date1 is earlier than date2")
    }


    let nextDay = Calendar.current.date(byAdding: .month, value: 1, to: Date())
    let toDay = Date()
    print(toDay)
    print(nextDay!)

    if nextDay! >= toDay  {
        print("date2 is earlier than date1")
    }
0
iOS