Datumsformat konfigurierbar (Einstellungen -> Darstellung)

MHD wurde in den Ansichten noch roh als YYYY-MM-DD ausgegeben. Jetzt:
- Neue Einstellung date_format (23.12.2026 | 23.12.26 | 23. Dezember 2026 |
  2026-12-23 | 12/23/2026) mit Live-Beispiel auf der Einstellungsseite.
- SettingsProvider stellt Format und formatDate() app-weit bereit und laedt die
  Einstellungen nach dem Login.
- Verwendet in Uebersicht (bald ablaufend), Produktdetail (Chargen) und
  Auslagern (Chargenauswahl). Datumsfelder zur Eingabe bleiben ISO, wie es das
  HTML-Datumsfeld verlangt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-22 15:04:01 +02:00
parent 4bb9a10366
commit 93e487a1b0
7 changed files with 112 additions and 7 deletions

View File

@@ -53,6 +53,34 @@ export function isExpired(dateStr) {
return d != null && d < 0;
}
// Auswählbare Datumsformate (Einstellungen -> Darstellung).
export const DATE_FORMATS = [
{ value: "de", label: "23.12.2026" },
{ value: "de-short", label: "23.12.26" },
{ value: "long", label: "23. Dezember 2026" },
{ value: "iso", label: "2026-12-23" },
{ value: "us", label: "12/23/2026" },
];
// Formatiert ein ISO-Datum (YYYY-MM-DD) nach dem gewählten Format.
export function formatDate(iso, format = "de") {
if (!iso) return "";
const date = new Date(`${iso}T00:00:00`);
if (Number.isNaN(date.getTime())) return iso;
switch (format) {
case "iso":
return iso;
case "de-short":
return date.toLocaleDateString("de-DE", { day: "2-digit", month: "2-digit", year: "2-digit" });
case "long":
return date.toLocaleDateString("de-DE", { day: "numeric", month: "long", year: "numeric" });
case "us":
return date.toLocaleDateString("en-US");
default:
return date.toLocaleDateString("de-DE");
}
}
// MHD lesbar als Zeitspanne: "in 3 Tagen", "in 1 Woche", "vor 2 Wochen".
// Deutsch nach "in"/"vor" steht im Dativ: 1 Tag / 3 Tagen, 1 Woche / 2 Wochen.
export function relativeExpiry(daysLeft) {