Das Mitternachtsproblem: Warum dein Streak kaputt aussah
Kurz gesagt: Wir haben einen Bug behoben, bei dem Nutzer in anderen Zeitzonen falsche "Streak gefährdet"-Warnungen sahen.
Was ist schiefgelaufen?
Unser Habit-Tracker zeigt eine Warnung, wenn du deinen Streak verlieren könntest. Die Logik ist einfach: Wenn du gestern einen Streak hattest, aber dein Habit nicht erledigt hast, warnen wir dich heute.
Das Problem? Wir haben "heute" und "gestern" mit der Server-Uhr berechnet, nicht mit deiner.
# Der Bug
today = date.today() # Server-Zeit (UTC)
Wenn unser Server in UTC läuft und du in Berlin lebst (UTC+1), passiert um 23:30 Uhr folgendes:
- Deine Sicht: Es ist noch Montagabend. Du hast Zeit, dein Habit zu erledigen.
- Server-Sicht: Es ist 22:30 UTC, noch Montag—aber im Winter bei UTC+1 kann es knapp werden.
Bei größeren Zeitunterschieden (z.B. Nutzer in New York, UTC-5) wird das Problem deutlicher:
- Um 20 Uhr in New York ist es bereits 1 Uhr nachts UTC (nächster Tag!)
Ergebnis: Falsche "Streak gefährdet"-Warnungen.
Die Lösung
Wir lesen jetzt deine Zeitzone aus deinem Profil und berechnen die Daten entsprechend:
# Die Lösung
user_tz = ZoneInfo(profile.timezone or "UTC")
now_local = datetime.now(timezone.utc).astimezone(user_tz)
today = now_local.date()
Drei Schritte:
- Deine Zeitzoneneinstellung holen (z.B. "Europe/Berlin")
- Aktuelle UTC-Zeit in deine lokale Zeit umrechnen
- Das Datum aus dieser lokalen Zeit extrahieren
Jetzt bedeutet "heute" auch heute fĂĽr dich.
Was wir gelernt haben
- Zeitstempel immer in UTC speichern
- FĂĽr Anzeige und Logik immer in die Nutzer-Zeitzone umrechnen
- Zeit-Bugs sind tückisch—sie zeigen sich nur bei Nutzern weit weg von der Server-Zeitzone
Diese Korrektur ist ab sofort verfĂĽgbar. Stelle sicher, dass deine Zeitzone in den Profileinstellungen korrekt gesetzt ist!