From 809f4784385cfa0cad1016071611f6f9a13517dc Mon Sep 17 00:00:00 2001 From: Tsanislav Gatev Date: Wed, 9 Sep 2020 16:32:42 +0300 Subject: [PATCH 1/3] fix(ui5-daterange-picker): date selection is now correct in all timezones --- packages/main/src/DatePicker.js | 6 +++--- packages/main/src/DateRangePicker.js | 23 ++++++++++++++--------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/packages/main/src/DatePicker.js b/packages/main/src/DatePicker.js index 21a363a5c567..38746275f961 100644 --- a/packages/main/src/DatePicker.js +++ b/packages/main/src/DatePicker.js @@ -481,9 +481,9 @@ class DatePicker extends UI5Element { _getTimeStampFromString(value) { const jsDate = this.getFormat().parse(value); if (jsDate) { - const jsDateTimeNow = new Date(jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate()); - const oCalDate = CalendarDate.fromTimestamp(jsDateTimeNow.getTime(), this._primaryCalendarType); - return oCalDate.valueOf(); + const jsDateTimeNow = Date.UTC(jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate()); + const calDate = CalendarDate.fromTimestamp(jsDateTimeNow, this._primaryCalendarType); + return calDate.valueOf(); } return undefined; } diff --git a/packages/main/src/DateRangePicker.js b/packages/main/src/DateRangePicker.js index f5ced3c4e849..5756402a6fb3 100644 --- a/packages/main/src/DateRangePicker.js +++ b/packages/main/src/DateRangePicker.js @@ -7,6 +7,7 @@ import DateRangePickerTemplate from "./generated/templates/DateRangePickerTempla // Styles import DateRangePickerCss from "./generated/themes/DateRangePicker.css.js"; import DatePicker from "./DatePicker.js"; +import Calendar from "./Calendar.js"; /** * @public @@ -191,8 +192,12 @@ class DateRangePicker extends DatePicker { } this.valueState = ValueState.None; - this._firstDateTimestamp = this.getFormat().parse(dates[0]).getTime() / 1000; - this._lastDateTimestamp = this.getFormat().parse(dates[1]).getTime() / 1000; + const firstDate = this.getFormat().parse(dates[0]); + const secondDate =this.getFormat().parse(dates[1]); + + this._firstDateTimestamp = Date.UTC(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate(), firstDate.getHours()) / 1000; + this._lastDateTimestamp = Date.UTC(secondDate.getFullYear(), secondDate.getMonth(), secondDate.getDate(), secondDate.getHours()) / 1000; + if (this._firstDateTimestamp > this._lastDateTimestamp) { const temp = this._firstDateTimestamp; @@ -325,8 +330,7 @@ class DateRangePicker extends DatePicker { dateIntervalArrayBuilder(firstTimestamp, lastTimestamp) { const datesTimestamps = [], - jsDate = new Date(firstTimestamp), - tempCalendarDate = new CalendarDate(jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate()); + tempCalendarDate = CalendarDate.fromTimestamp(firstTimestamp); while (tempCalendarDate.valueOf() < lastTimestamp) { datesTimestamps.push(tempCalendarDate.valueOf() / 1000); @@ -339,8 +343,7 @@ class DateRangePicker extends DatePicker { } _handleCalendarChange(event) { - const newValue = event.detail.dates && event.detail.dates[0]; - + let newValue = event.detail.dates && event.detail.dates[0]; this._oneTimeStampSelected = false; if (this.isFirstDatePick) { this.isFirstDatePick = false; @@ -373,7 +376,7 @@ class DateRangePicker extends DatePicker { this._cleanHoveredAttributeFromVisibleItems(); this._calendar.timestamp = this._firstDateTimestamp; - this._calendar.selectedDates = this.dateIntervalArrayBuilder(this._firstDateTimestamp, this._lastDateTimestamp); + this._calendar.selectedDates = this.dateIntervalArrayBuilder(this._firstDateTimestamp * 1000, this._lastDateTimestamp * 1000); this._focusInputAfterClose = true; if (this.isInValidRange(this.value)) { @@ -408,8 +411,10 @@ class DateRangePicker extends DatePicker { let value = ""; const delimiter = this.delimiter, format = this.getFormat(), - firstDateString = format.format(new Date(firstDateValue * 1000)), - lastDateString = format.format(new Date(lastDateValue * 1000)); + firstDate = new Date(firstDateValue * 1000), + lastDate = new Date(lastDateValue * 1000), + firstDateString = format.format(new Date(firstDate.getUTCFullYear(), firstDate.getUTCMonth(), firstDate.getUTCDate(), firstDate.getUTCHours())), + lastDateString = format.format(new Date(lastDate.getUTCFullYear(), lastDate.getUTCMonth(), lastDate.getUTCDate(), lastDate.getUTCHours())); if (firstDateValue) { if (delimiter && delimiter !== "" && lastDateString) { From 3132bdc4d5e4abf7ee64ed114368cb0a515a9245 Mon Sep 17 00:00:00 2001 From: Tsanislav Gatev Date: Wed, 9 Sep 2020 16:37:29 +0300 Subject: [PATCH 2/3] removed unused reference --- packages/main/src/DateRangePicker.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/main/src/DateRangePicker.js b/packages/main/src/DateRangePicker.js index 5756402a6fb3..e9e477c965f8 100644 --- a/packages/main/src/DateRangePicker.js +++ b/packages/main/src/DateRangePicker.js @@ -7,7 +7,6 @@ import DateRangePickerTemplate from "./generated/templates/DateRangePickerTempla // Styles import DateRangePickerCss from "./generated/themes/DateRangePicker.css.js"; import DatePicker from "./DatePicker.js"; -import Calendar from "./Calendar.js"; /** * @public From 5c1c849974c4527732d6b9c403a3e2e218b8a562 Mon Sep 17 00:00:00 2001 From: Tsanislav Gatev Date: Thu, 10 Sep 2020 12:05:20 +0300 Subject: [PATCH 3/3] lint fix --- packages/main/src/DateRangePicker.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/main/src/DateRangePicker.js b/packages/main/src/DateRangePicker.js index e9e477c965f8..f04ac829f75c 100644 --- a/packages/main/src/DateRangePicker.js +++ b/packages/main/src/DateRangePicker.js @@ -192,7 +192,7 @@ class DateRangePicker extends DatePicker { this.valueState = ValueState.None; const firstDate = this.getFormat().parse(dates[0]); - const secondDate =this.getFormat().parse(dates[1]); + const secondDate = this.getFormat().parse(dates[1]); this._firstDateTimestamp = Date.UTC(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate(), firstDate.getHours()) / 1000; this._lastDateTimestamp = Date.UTC(secondDate.getFullYear(), secondDate.getMonth(), secondDate.getDate(), secondDate.getHours()) / 1000; @@ -342,7 +342,7 @@ class DateRangePicker extends DatePicker { } _handleCalendarChange(event) { - let newValue = event.detail.dates && event.detail.dates[0]; + const newValue = event.detail.dates && event.detail.dates[0]; this._oneTimeStampSelected = false; if (this.isFirstDatePick) { this.isFirstDatePick = false;