From b440e129a929f62733f72cf1f799d04f060dc71a Mon Sep 17 00:00:00 2001 From: Massedil Date: Fri, 1 Nov 2024 19:09:38 +0100 Subject: [PATCH] Issue #1511 : Harmonization to use UTC functions for all dates "The above approach attempts to manipulate the Date object's time zone by shifting the Unix timestamp by some other time zone offset. However, since the Date object only tracks time in UTC, it actually just makes the Date object represent a different point in time. [...] When doing so, any access to non-UTC properties must be avoided. " See: https://stackoverflow.com/a/15171030 --- src/views/Event/EditView.vue | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/views/Event/EditView.vue b/src/views/Event/EditView.vue index 478cbda5b..a072d13a3 100644 --- a/src/views/Event/EditView.vue +++ b/src/views/Event/EditView.vue @@ -718,9 +718,11 @@ const saving = ref(false); const initializeEvent = () => { const roundUpTo15Minutes = (time: Date) => { - time.setMilliseconds(Math.round(time.getMilliseconds() / 1000) * 1000); - time.setSeconds(Math.round(time.getSeconds() / 60) * 60); - time.setMinutes(Math.round(time.getMinutes() / 15) * 15); + time.setUTCMilliseconds( + Math.round(time.getUTCMilliseconds() / 1000) * 1000 + ); + time.setUTCSeconds(Math.round(time.getUTCSeconds() / 60) * 60); + time.setUTCMinutes(Math.round(time.getUTCMinutes() / 15) * 15); return time; }; @@ -1208,7 +1210,7 @@ const beginsOn = computed({ } // return event.value.beginsOn taking care of timezone const date = new Date(event.value.beginsOn); - date.setMinutes(date.getMinutes() + tzOffset(date)); + date.setUTCMinutes(date.getUTCMinutes() + tzOffset(date)); return date; }, set(newBeginsOn: Date | null) { @@ -1218,18 +1220,18 @@ const beginsOn = computed({ } // usefull for comparaison - newBeginsOn.setSeconds(0); - newBeginsOn.setMilliseconds(0); + newBeginsOn.setUTCSeconds(0); + newBeginsOn.setUTCMilliseconds(0); // update event.value.beginsOn taking care of timezone const date = new Date(newBeginsOn.getTime()); - date.setMinutes(date.getMinutes() - tzOffset(newBeginsOn)); + date.setUTCMinutes(date.getUTCMinutes() - tzOffset(newBeginsOn)); event.value.beginsOn = date.toISOString(); // Update endsOn to make sure endsOn is later than beginsOn if (endsOn.value && endsOn.value <= newBeginsOn) { const newEndsOn = new Date(newBeginsOn); - newEndsOn.setHours(newBeginsOn.getHours() + 1); + newEndsOn.setUTCHours(newBeginsOn.getUTCHours() + 1); endsOn.value = newEndsOn; } }, @@ -1243,7 +1245,7 @@ const endsOn = computed({ // return event.value.endsOn taking care of timezone const date = new Date(event.value.endsOn); - date.setMinutes(date.getMinutes() + tzOffset(date)); + date.setUTCMinutes(date.getUTCMinutes() + tzOffset(date)); return date; }, set(newEndsOn: Date | null) { @@ -1253,12 +1255,12 @@ const endsOn = computed({ } // usefull for comparaison - newEndsOn.setSeconds(0); - newEndsOn.setMilliseconds(0); + newEndsOn.setUTCSeconds(0); + newEndsOn.setUTCMilliseconds(0); // update event.value.endsOn taking care of timezone const date = new Date(newEndsOn.getTime()); - date.setMinutes(date.getMinutes() - tzOffset(newEndsOn)); + date.setUTCMinutes(date.getUTCMinutes() - tzOffset(newEndsOn)); event.value.endsOn = date.toISOString(); }, });