Anzahl Tage zwischen zweit Datumsangaben berechnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Anzahl Tage zwischen zweit Datumsangaben berechnen

    Hallo Forum,

    ich habe folgendes Problem und hoffe Ihr könnt mir ein paar Hilfestellungen geben.

    Problem:
    Ich habe zwei Datumsangaben, wie z.B. "2020-03-21" und "Date()", sprich aktuelles Datum von heute. Nun benötige ich die Anzahl der Tage zwischen den beiden Daten.

    Ich habe "gestöbert" und ein bisschen im Playground "gespielt", finde aber ehrlich gesagt keine Lösung. Hier meine bisherigen Versuche:

    Quellcode

    1. public func ConvertStringToDate(DateValue: String) -> Date {
    2. let formatter = DateFormatter()
    3. let dValue = DateValue
    4. //formatter.locale = Locale(identifier: "en_US_POSIX")
    5. formatter.dateFormat = "yyyy-MM-dd"
    6. var date = formatter.date(from: dValue)
    7. if (date==nil)
    8. {
    9. formatter.dateFormat = "yyyy-MM-dd"
    10. //formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    11. date = formatter.date(from: dValue)
    12. }
    13. return date!
    14. }
    15. // Hole aktuellen Zeitpunkt (today) und User-definierten Zeitpunkt
    16. let today = Date()
    17. let startDate = ConvertStringToDate(DateValue: "2020-10-05")
    18. let calender = Calendar.current
    19. let interval = calender.dateInterval(of: .month, for: today)!
    20. let timeDifference = calender.dateComponents([.day], from: interval.start, to: interval.end).day
    21. print(timeDifference ?? 0)
    Alles anzeigen

    Das Ergebnis ist hier "31", die Anzahl der Tage im Monat --> .month.

    Was mir jetzt fehlt, bzw. vielleicht ist es ja auch der völlig falsche Ansatz, wie ich dem calender.dateInterval das startDate "verpassen" kann ?(
    Wenn ich .month durch startDate ersetze kommt ein Fehler, der mir ja auch logisch erscheint. Mir fehlt jetzt die Idee wie ich startDate in Calender.Component bekomme ... ??

    Quellcode

    1. Cannot convert value of type 'Date' to expected argument type 'Calendar.Component'

    Bin wie immer für jeden Hinweis dankbar.

    Gruß

    Ralf
  • Hallo Chris,

    das habe ich ja mit folgendem Code probiert:

    Quellcode

    1. let interval = calender.dateInterval(of: .month, for: today)!
    2. let timeDifference = calender.dateComponents([.day], from: interval.start, to: interval.end).day
    mein Problem ist aber das ich nicht weiß wie ich den Start Zeitpunkt für das Interval auf ein von mir definiertes Datum --> startDate

    Quellcode

    1. let startDate = ConvertStringToDate(DateValue: "2020-10-05")

    gesetzt bekomme?
    Hättest Du vielleicht hier ein Beispiel für mich?

    Gruß

    Ralf
  • Hallo Ralf,

    ich bin mir nicht sicher, ob ich in deiner Frage etwas übersehe. Kann es sein, dass du das ganze etwas zu kompliziert machst? Für was brauchst du denn überhaupt interval? Du kannst doch ganz einfach

    Quellcode

    1. let timeDifferenceInDays = Calendar.current.dateComponents([.days], from: startDate, to: today).day
    nutzen und erhältst die Anzahl an Tagen zwischen den beiden Dates..

    Grüße
  • Hallo @Osxer

    so einfach kann das Leben sein wenn man weiß wie es geht 8o
    Tja, ich habe noch sehr viel zu lernen, habe mich beim suchen auf den falschen Weg fokussiert.
    Folgender Code funktioniert jetzt für mich:

    Quellcode

    1. let today = Date()
    2. let startDateString = "2020-03-23T08:00:00+0000"
    3. let dateFormatter = DateFormatter()
    4. dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    5. dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    6. let startdate = dateFormatter.date(from: startDateString)!
    7. print(startdate)
    8. print(today)
    9. let timeDifferenceInDays = Calendar.current.dateComponents([.day], from: startdate, to: today).day
    10. print(timeDifferenceInDays!)
    Alles anzeigen

    Das Ergebnis:


    Quellcode

    1. 2020-03-23 08:00:00 +0000
    2. 2020-10-05 18:42:57 +0000
    3. 196
    VIELN DANK nochmal und einen schönen Abend :)

    Gruß

    Ralf

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ralfb ()