Zwei Daten vergleichen bringt falsche Ergebnisse für Tag, Monat....

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

  • Zwei Daten vergleichen bringt falsche Ergebnisse für Tag, Monat....

    Ich habe ein Problem mit dem Vergleichen Daten, welche ich per String übergebe.
    Meine Funktion schaut so aus:

    Quellcode

    1. func compareDates(startDateString : String, compareDateString : String ) ->DateComponents {
    2. let dateFormatter = DateFormatter()
    3. dateFormatter.dateFormat = "dd.MM.yyyy"
    4. let startDate = dateFormatter.date(from: startDateString)!
    5. let compareDate = dateFormatter.date(from: compareDateString)!
    6. print(startDate)
    7. print(compareDate)
    8. let difference = let difference = Calendar.current.dateComponents([.day, .month, .weekOfYear],from: startDate, to: compareDate)
    9. print(difference)
    10. return difference
    11. }
    Alles anzeigen


    Ausgeführt wird sie in der View:

    Quellcode

    1. struct statistikView: View {
    2. var calculates = Calculates()
    3. var startString = "02.04.2022"
    4. var compareString = "31.12.2022"
    5. var body: some View {
    6. var difference = calculates.compareDates(startDateString: startString, compareDateString: compareString)
    7. Text("\(difference.day!)")
    8. }
    9. }
    Hier bekomme ich nun die folgende Print Ausgabe:


    Quellcode

    1. 2022-04-01 22:00:00 +0000
    2. 2022-12-30 23:00:00 +0000
    3. month: 8 day: 1 weekOfYear: 4 isLeapMonth: false

    Die ermittelten Unterschiede stimmen allerdings leider absolut nicht.
    Frage ich hingegen nur einen Wert ab (egal ob Tag, Monat, Woche....) dann stimmt die Anzahl.

    Wo liegt mein Fehler? Hab ich einen Verständnisfehler?
  • Das passt doch. Ich habe das schnell in Playground ausprobiert und ich bekommen


    Quellcode

    1. import Foundation
    2. let formatter = DateFormatter()
    3. formatter.dateFormat = "dd.MM.yyyy"
    4. let d1 = formatter.date(from: "02.04.2022")!
    5. print(formatter.string(from: d1))
    6. let d2 = formatter.date(from: "31.12.2022")!
    7. print(formatter.string(from: d2))
    8. let diff = Calendar.current.dateComponents([.day, .month], from: d1, to: d2)
    9. print(diff)
    10. // 02.04.2022
    11. // 31.12.2022
    12. // month: 8 day: 29 isLeapMonth: false
    Alles anzeigen
    Sieht doch gut aus!

    Allerdings fehlt .weekOfYear bei mir! WeekOfYear - counts of week => 4 * 7 Tage = 28 Tage Und schon sieht es gut aus, denn 28 Tage + 1 Tag = 29 Tage
  • Danke, ich habe meinen Denkfehler gefunden.

    Zwischen dem 02.04.22 und 31.12.22 sind es 8 Monate und 29 Tage ...

    Ich habe allerdings gedacht, dass ich als Differenz: 273 Tage oder 8 Monate oder 39 Wochen angezeigt bekomme.


    Kennt jemand eine andere Möglichkeit, an die Werte zu kommen? Mir würde jetzt nur der Weg einfallen, dass ich die Tage auslese und dann die Wochen, Monate rechnerisch ermittle. Da habe ich allerdings die Befürchtung dass gerade Schaltjahre und Monate mit 30 Tage ein paar Probleme, bzw. Fehler verursachen werden.

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

  • Ich möchte anhand der verbliebende Tage / Wochen usw. einzelne Werte ausrechnen.
    Wenn ich nur die errechneten Sekunden habe, dann müsste ich die Tage/Wochen usw. ja auch noch umrechnen.

    Würde gern so etwas in der Art erreichen:

    var punkt1 = 1000

    var proTag = die erechneten Tage
    var proWoche = die errechneten Wochen

    Text("Pro Tag sind es \(punkt1 / proTag ) ")

    Mit de