From c5010b8502f6945d988e17f0b07bd1fb8590677f Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Fri, 8 Aug 2025 06:57:54 -0700 Subject: [PATCH] Fix some date-range bugs (#26441) --- src/common/datetime/calc_date.ts | 6 ++-- src/components/ha-date-range-picker.ts | 38 ++++++++++++++++++-------- src/panels/history/ha-panel-history.ts | 8 +----- src/panels/logbook/ha-panel-logbook.ts | 4 --- 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/common/datetime/calc_date.ts b/src/common/datetime/calc_date.ts index bb94dc2bbc..f86aac3f79 100644 --- a/src/common/datetime/calc_date.ts +++ b/src/common/datetime/calc_date.ts @@ -132,15 +132,13 @@ export const shiftDateRange = ( end = calcDate(endDate, addDays, locale, config, difference); } else { const difference = - ((calcDateDifferenceProperty( + (calcDateDifferenceProperty( endDate, startDate, differenceInMilliseconds, locale, config - ) as number) + - 1) * - (forward ? 1 : -1); + ) as number) * (forward ? 1 : -1); start = calcDate(startDate, addMilliseconds, locale, config, difference); end = calcDate(endDate, addMilliseconds, locale, config, difference); } diff --git a/src/components/ha-date-range-picker.ts b/src/components/ha-date-range-picker.ts index 00a4ef44ef..86d4fc469d 100644 --- a/src/components/ha-date-range-picker.ts +++ b/src/components/ha-date-range-picker.ts @@ -254,21 +254,37 @@ export class HaDateRangePicker extends LitElement { } private _applyDateRange() { - if (this.hass.locale.time_zone === TimeZone.server) { - const dateRangePicker = this._dateRangePicker; + let start = new Date(this._dateRangePicker.start); + let end = new Date(this._dateRangePicker.end); - const startDate = fromZonedTime( - dateRangePicker.start, - this.hass.config.time_zone - ); - const endDate = fromZonedTime( - dateRangePicker.end, - this.hass.config.time_zone - ); + if (this.timePicker) { + start.setSeconds(0); + start.setMilliseconds(0); + end.setSeconds(0); + end.setMilliseconds(0); - dateRangePicker.clickRange([startDate, endDate]); + if ( + end.getHours() === 0 && + end.getMinutes() === 0 && + start.getFullYear() === end.getFullYear() && + start.getMonth() === end.getMonth() && + start.getDate() === end.getDate() + ) { + end.setDate(end.getDate() + 1); + } } + if (this.hass.locale.time_zone === TimeZone.server) { + start = fromZonedTime(start, this.hass.config.time_zone); + end = fromZonedTime(end, this.hass.config.time_zone); + } + + if ( + start.getTime() !== this._dateRangePicker.start.getTime() || + end.getTime() !== this._dateRangePicker.end.getTime() + ) { + this._dateRangePicker.clickRange([start, end]); + } this._dateRangePicker.clickedApply(); } diff --git a/src/panels/history/ha-panel-history.ts b/src/panels/history/ha-panel-history.ts index 12d18e4286..6a072ea7ef 100644 --- a/src/panels/history/ha-panel-history.ts +++ b/src/panels/history/ha-panel-history.ts @@ -426,13 +426,7 @@ class HaPanelHistory extends LitElement { private _dateRangeChanged(ev) { this._startDate = ev.detail.value.startDate; - const endDate = ev.detail.value.endDate; - if (endDate.getHours() === 0 && endDate.getMinutes() === 0) { - endDate.setDate(endDate.getDate() + 1); - endDate.setMilliseconds(endDate.getMilliseconds() - 1); - } - this._endDate = endDate; - + this._endDate = ev.detail.value.endDate; this._updatePath(); } diff --git a/src/panels/logbook/ha-panel-logbook.ts b/src/panels/logbook/ha-panel-logbook.ts index 037f5da57d..5e91b8aaff 100644 --- a/src/panels/logbook/ha-panel-logbook.ts +++ b/src/panels/logbook/ha-panel-logbook.ts @@ -236,10 +236,6 @@ export class HaPanelLogbook extends LitElement { private _dateRangeChanged(ev) { const startDate = ev.detail.value.startDate; const endDate = ev.detail.value.endDate; - if (endDate.getHours() === 0 && endDate.getMinutes() === 0) { - endDate.setDate(endDate.getDate() + 1); - endDate.setMilliseconds(endDate.getMilliseconds() - 1); - } this._time = { range: [startDate, endDate], };