From 349262b8c82c96ad8c4237d2a191d4b7ba208b13 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Fri, 2 Oct 2026 15:49:05 +0200 Subject: parse the dates provided by moodle manually The reported date values are in german locale and can not be parsed by my browser for example. --- src/graduation-common.ts | 4 +++- src/utils-common.ts | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/graduation-common.ts b/src/graduation-common.ts index 0652c59..2d1f21d 100644 --- a/src/graduation-common.ts +++ b/src/graduation-common.ts @@ -6,6 +6,8 @@ import EntdeckerPng from "../assets/Entdecker.png"; import NavigatorPng from "../assets/Navigator.png"; import PioneerPng from "../assets/Pioneer.png"; +import { parseMoodleDate } from "./utils-common.ts"; + const LEVEL_NAMES = ["Anwärter", "Entdecker", "Navigator", "Pionieer"]; const LEVEL_IMAGES = [ @@ -62,7 +64,7 @@ class GraduationChange { const change = JSON.parse(json); return new GraduationChange( Number(changeId), - new Date(date), + parseMoodleDate(date), Number(change.studentId), change.change, change.reason, diff --git a/src/utils-common.ts b/src/utils-common.ts index d644b10..055fee6 100644 --- a/src/utils-common.ts +++ b/src/utils-common.ts @@ -77,3 +77,29 @@ export function splitmix32(a: number) { return ((t = t ^ (t >>> 15)) >>> 0) / 4294967296; }; } + +const MOODLE_DATE_REGEX = /\w+, (\d+)\. (\w+) (\d+), (\d\d):(\d\d)/; +const MONTHS: { [m: string]: number } = { + Januar: 1, + Februar: 2, + März: 3, + April: 4, + Mai: 5, + Juni: 6, + Juli: 7, + August: 8, + September: 9, + Oktober: 9, + November: 10, + Dezember: 11, +}; + +export function parseMoodleDate(s: string) { + const match = MOODLE_DATE_REGEX.exec(s); + if (!match) { + return new Date(-1); + } + + const month = MONTHS[match[2]]; + return new Date(Number(match[3]), month, Number(match[1]), Number(match[4]), Number(match[4])); +} -- cgit v1.2.3