From d35e5c90fb164f3650b4f273f7abc7c2afad84be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 26 Nov 2021 17:12:54 +0100 Subject: Fix datetime becomming dateonly when hitting midnight. --- static/components/date-time-input.ts | 27 ++++++++++++++++++--------- static/lib.ts | 4 ++-- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/static/components/date-time-input.ts b/static/components/date-time-input.ts index a9d10ba3..27dad095 100644 --- a/static/components/date-time-input.ts +++ b/static/components/date-time-input.ts @@ -19,7 +19,7 @@ class DateTimeInput extends /* HTMLInputElement */ HTMLElement { makeElement('input', { type: 'date' }), makeElement('input', { type: 'time', - disabled: this.hasAttribute('dateonly') + disabled: this.dateonly }) ) } @@ -59,29 +59,38 @@ class DateTimeInput extends /* HTMLInputElement */ HTMLElement { } } - get valueAsDate(): Date { + set value(date: Date) { + let [d, t] = date.format("~L~Y-~m-~dT~H:~M:~S").split('T'); + console.log(d, t); + (this.querySelector("input[type='date']") as HTMLInputElement).value = d; + (this.querySelector("input[type='time']") as HTMLInputElement).value = t; + + this.dateonly = date.dateonly; + } + + get value(): Date { let dt; let date = (this.querySelector("input[type='date']") as HTMLInputElement).value; - if (this.hasAttribute('dateonly')) { + if (this.dateonly) { dt = parseDate(date); - dt.type = 'date'; + dt.dateonly = true; } else { let time = (this.querySelector("input[type='time']") as HTMLInputElement).value; dt = parseDate(date + 'T' + time) - dt.type = 'date-time'; + dt.dateonly = false; } return dt; } - get value(): string { + get stringValue(): string { if (this.dateonly) { - return this.valueAsDate.format("~Y-~m-~d") + return this.value.format("~Y-~m-~d") } else { - return this.valueAsDate.format("~Y-~m-~dT~H:~M:~S") + return this.value.format("~Y-~m-~dT~H:~M:~S") } } - set value(new_value: Date | string) { + set stringValue(new_value: Date | string) { // console.log('Setting date'); let date, time, dateonly = false; if (new_value instanceof Date) { diff --git a/static/lib.ts b/static/lib.ts index 8845f37b..bc072545 100644 --- a/static/lib.ts +++ b/static/lib.ts @@ -24,9 +24,9 @@ declare global { interface Date { format: (fmt: string) => string - dateonly: boolean utc: boolean - type: 'date' | 'date-time' + dateonly: boolean + // type: 'date' | 'date-time' } interface DOMTokenList { -- cgit v1.2.3