From bfe00e5bd7c4f1c4304147983e2bdaeee593e46e Mon Sep 17 00:00:00 2001 From: Mike Sheldon Date: Thu, 20 Mar 2025 21:24:52 +0000 Subject: [PATCH] Preserve time difference when changing start date (fixes #596) --- src/views/Event/EditView.vue | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/views/Event/EditView.vue b/src/views/Event/EditView.vue index 931ab2cb9..3e1c5ac47 100644 --- a/src/views/Event/EditView.vue +++ b/src/views/Event/EditView.vue @@ -1312,7 +1312,7 @@ watch(endsOn, (newEndsOn) => { updateEventDateRelatedToTimezone(); }); -/* +/* For endsOn, we need to check consistencyBeginsOnBeforeEndsOn() at blur because the datetime-local component update itself immediately Ex : your event start at 10:00 and stops at 12:00 @@ -1322,9 +1322,18 @@ So you cannot check consistensy in real time, only onBlur because of the moment const consistencyBeginsOnBeforeEndsOn = () => { // Update endsOn to make sure endsOn is later than beginsOn if (endsOn.value && beginsOn.value && endsOn.value <= beginsOn.value) { - const newEndsOn = new Date(beginsOn.value); - newEndsOn.setUTCHours(beginsOn.value.getUTCHours() + 1); + // If the start date has changed, preserve the time difference + const newEndsOn = new Date(endsOn.value); + newEndsOn.setDate(beginsOn.value.getDate()); + newEndsOn.setMonth(beginsOn.value.getMonth()); + newEndsOn.setFullYear(beginsOn.value.getFullYear()); endsOn.value = newEndsOn; + // If the end time is still earlier than the start time set a 1 hour difference + if (endsOn.value <= beginsOn.value) { + const newEndsOn2 = new Date(beginsOn.value); + newEndsOn2.setUTCHours(beginsOn.value.getUTCHours() + 1); + endsOn.value = newEndsOn2; + } } };