EngineeringBug FixHabits

Das Mitternachtsproblem: Warum dein Streak kaputt aussah

feeldata Team·

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:

  1. Deine Zeitzoneneinstellung holen (z.B. "Europe/Berlin")
  2. Aktuelle UTC-Zeit in deine lokale Zeit umrechnen
  3. 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!