Kalenderwochen-Berechnung in ModernWeekField ist falsch #8

Closed
opened 2026-09-09 20:12:43 +00:00 by Aceless · 1 comment
Owner
int _weekNumber(DateTime date) {
  final firstThursday = DateTime(date.year, 1, 4);
  final diff = date.difference(firstThursday).inDays;
  return 1 + (diff / 7).floor();
}

Die Variable heisst firstThursday, enthaelt aber schlicht den 4. Januar - das ist nur in manchen Jahren ein Donnerstag. Ausserdem fehlt die Normalisierung auf den Wochenbeginn und die Behandlung des Jahreswechsels.

Beispiele:

  • 01.01.2026: diff = -3, floor(-3/7) = -1 -> KW 0
  • Tage Ende Dezember, die nach ISO 8601 zur KW 1 des Folgejahres gehoeren, erscheinen als KW 53

Zusaetzlich verfaelscht date.difference(...) bei Sommerzeitwechseln die Tagesdifferenz, weil DateTime hier lokal ist.

Vorschlag: ISO-8601-Berechnung ueber den Donnerstag der laufenden Woche:

int _isoWeekNumber(DateTime date) {
  final d = DateTime(date.year, date.month, date.day);
  final thursday = d.add(Duration(days: 4 - d.weekday));
  final firstJan = DateTime(thursday.year, 1, 1);
  return (thursday.difference(firstJan).inDays / 7).floor() + 1;
}

Datei: app/lib/widgets/modern_week_field.dart:36-40

```dart int _weekNumber(DateTime date) { final firstThursday = DateTime(date.year, 1, 4); final diff = date.difference(firstThursday).inDays; return 1 + (diff / 7).floor(); } ``` Die Variable heisst `firstThursday`, enthaelt aber schlicht den 4. Januar - das ist nur in manchen Jahren ein Donnerstag. Ausserdem fehlt die Normalisierung auf den Wochenbeginn und die Behandlung des Jahreswechsels. Beispiele: - 01.01.2026: `diff = -3`, `floor(-3/7) = -1` -> **KW 0** - Tage Ende Dezember, die nach ISO 8601 zur KW 1 des Folgejahres gehoeren, erscheinen als KW 53 Zusaetzlich verfaelscht `date.difference(...)` bei Sommerzeitwechseln die Tagesdifferenz, weil `DateTime` hier lokal ist. **Vorschlag:** ISO-8601-Berechnung ueber den Donnerstag der laufenden Woche: ```dart int _isoWeekNumber(DateTime date) { final d = DateTime(date.year, date.month, date.day); final thursday = d.add(Duration(days: 4 - d.weekday)); final firstJan = DateTime(thursday.year, 1, 1); return (thursday.difference(firstJan).inDays / 7).floor() + 1; } ``` Datei: `app/lib/widgets/modern_week_field.dart:36-40`
Author
Owner

Behoben auf Branch frontend-improvements.

isoWeekNumber in settings_service.dart rechnet in UTC ueber den Donnerstag der Woche. Der 01.01.2026 ergibt jetzt KW 1 statt KW 0, abgedeckt in test/week_calculation_test.dart.

Commits
  • 47edeeb Added Claude
  • 9b16a6e Einstellungen mit Ladebalken, url_launcher-Plugin-Registrierung
  • 8ad68a4 Settings erreichbar, Secrets sichern, Theme-Tokens, toter Code weg, Tests
  • bf204d3 Rezeptliste, Detail, Vorschlaege und Spaces ueberarbeiten
  • d85c681 Rezept-Editor: Absturz, stiller Datenverlust und Controller-Leaks beheben
  • d970fbe Provider-State korrigieren, Fehler sichtbar machen, Wochenlogik zentralisieren
  • 71e557d Start entkoppeln, API-Client haerten, Theme auf Tokens umstellen

flutter analyze: 0 Issues. flutter test: 22 Tests gruen.

Behoben auf Branch `frontend-improvements`. isoWeekNumber in settings_service.dart rechnet in UTC ueber den Donnerstag der Woche. Der 01.01.2026 ergibt jetzt KW 1 statt KW 0, abgedeckt in test/week_calculation_test.dart. <details><summary>Commits</summary> - 47edeeb Added Claude - 9b16a6e Einstellungen mit Ladebalken, url_launcher-Plugin-Registrierung - 8ad68a4 Settings erreichbar, Secrets sichern, Theme-Tokens, toter Code weg, Tests - bf204d3 Rezeptliste, Detail, Vorschlaege und Spaces ueberarbeiten - d85c681 Rezept-Editor: Absturz, stiller Datenverlust und Controller-Leaks beheben - d970fbe Provider-State korrigieren, Fehler sichtbar machen, Wochenlogik zentralisieren - 71e557d Start entkoppeln, API-Client haerten, Theme auf Tokens umstellen </details> `flutter analyze`: 0 Issues. `flutter test`: 22 Tests gruen.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Aceless/RecipePlanner#8
No description provided.