4 Commits
2.0.2 ... 2.1.1

2 changed files with 14 additions and 11 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "@tp/tp-date-input", "name": "@tp/tp-date-input",
"version": "2.0.2", "version": "2.1.1",
"description": "", "description": "",
"main": "tp-date-input.js", "main": "tp-date-input.js",
"scripts": { "scripts": {

View File

@@ -292,7 +292,7 @@ class TpDateInput extends EventHelpers(ControlState(FormElement(LitElement))) {
} }
// Convert luxon format to match input assignment // Convert luxon format to match input assignment
const luxonFormat = this._inputAssign.map(part => { const format = this._inputAssign.map(part => {
switch (part) { switch (part) {
case 'MM': return 'LL'; case 'MM': return 'LL';
case 'dd': return 'dd'; case 'dd': return 'dd';
@@ -301,17 +301,18 @@ class TpDateInput extends EventHelpers(ControlState(FormElement(LitElement))) {
} }
}).join('-'); }).join('-');
const dt = DateTime.fromFormat(i0 + '-' + i1 + '-' + i2, luxonFormat); // Parse the entered values as a plain calendar date, then store as UTC midnight.
// Date-only fields are timezone-agnostic — April 7 means April 7 for everyone.
const dt = DateTime.fromFormat(i0 + '-' + i1 + '-' + i2, format);
if (dt.isValid) { if (dt.isValid) {
this.inputs[0].invalid = false; this.inputs[0].invalid = false;
this.inputs[1].invalid = false; this.inputs[1].invalid = false;
this.inputs[2].invalid = false; this.inputs[2].invalid = false;
// Convert to specified timezone or use system timezone const utcMidnight = DateTime.utc(dt.year, dt.month, dt.day);
const finalDt = this.timeZone ? dt.setZone(this.timeZone) : dt; this.date = utcMidnight.toJSDate();
this.date = finalDt.toJSDate(); this.value = utcMidnight.toISO();
this.value = finalDt.toISO();
this.invalid = false; this.invalid = false;
this.dispatchEvent(new CustomEvent('value-changed', { detail: this.value, bubbles: true, composed: true })); this.dispatchEvent(new CustomEvent('value-changed', { detail: this.value, bubbles: true, composed: true }));
} else { } else {
@@ -465,9 +466,10 @@ class TpDateInput extends EventHelpers(ControlState(FormElement(LitElement))) {
return; return;
} }
const dt = this._toDateTime(this.value); let dt = this._toDateTime(this.value);
if (dt && dt.isValid) { if (dt && dt.isValid) {
// Convert luxon format parts to match display format // Values are stored as UTC midnight — display the UTC calendar date as-is.
dt = dt.toUTC();
this._input0 = dt.toFormat(this._getLuxonFormat(this._inputAssign[0])); this._input0 = dt.toFormat(this._getLuxonFormat(this._inputAssign[0]));
this._input1 = dt.toFormat(this._getLuxonFormat(this._inputAssign[1])); this._input1 = dt.toFormat(this._getLuxonFormat(this._inputAssign[1]));
this._input2 = dt.toFormat(this._getLuxonFormat(this._inputAssign[2])); this._input2 = dt.toFormat(this._getLuxonFormat(this._inputAssign[2]));
@@ -488,7 +490,8 @@ class TpDateInput extends EventHelpers(ControlState(FormElement(LitElement))) {
if (this.today) { if (this.today) {
setTimeout(() => { setTimeout(() => {
if (!this.value) { if (!this.value) {
this.value = DateTime.now().toISO(); const now = DateTime.utc();
this.value = DateTime.utc(now.year, now.month, now.day).toISO();
} }
}); });
} }