From 7c6ddb32f81547305a2f6ae142367a930285f62c Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Tue, 25 Jun 2024 13:10:14 +0000
Subject: [PATCH] fix comparison of dates in consultation creator, re #3350

Merge request studip/studip!3147
---
 .../vue/components/ConsultationCreator.vue    | 21 ++++++++++++++++++-
 resources/vue/components/Datepicker.vue       |  2 +-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/resources/vue/components/ConsultationCreator.vue b/resources/vue/components/ConsultationCreator.vue
index 73c3cb1da49..487b9b97920 100644
--- a/resources/vue/components/ConsultationCreator.vue
+++ b/resources/vue/components/ConsultationCreator.vue
@@ -412,6 +412,25 @@ export default {
                 event.preventDefault();
             }
         },
+        compareDates(date0, date1, operator = '=', precision = 'day') {
+            const mapping = {
+                '<': 'isBefore',
+                '<=': 'isSameOrBefore',
+                '=': 'isSame',
+                '>=': 'isSameOrAfter',
+                '>': 'isAfter',
+            };
+
+            if (mapping[operator] === undefined) {
+                throw new Error(`Unsupported operator '${operator}'`);
+            }
+
+            const compareDate0 = moment(date0);
+            const compareDate1 = moment(date1);
+
+            const method = mapping[operator];
+            return compareDate0[method](compareDate1, precision);
+        },
         validateInputs(event) {
             const errors = [];
 
@@ -419,7 +438,7 @@ export default {
                 errors.push(this.$gettext('Die Endzeit liegt vor der Startzeit!'));
             }
 
-            if (this.interval > 0 && this.startDate > this.endDate) {
+            if (this.interval > 0 && this.compareDates(this.startDate, this.endDate, '>')) {
                 errors.push(this.$gettext('Das Enddatum liegt vor dem Startdatum!'));
             }
 
diff --git a/resources/vue/components/Datepicker.vue b/resources/vue/components/Datepicker.vue
index 5c2c0f75cb7..65463a947f8 100644
--- a/resources/vue/components/Datepicker.vue
+++ b/resources/vue/components/Datepicker.vue
@@ -76,7 +76,7 @@ export default {
                 return this.convertInputToNativeDate(this.value).toISOString();
             }
 
-            return this.convertInputToNativeDate(this.value).toLocaleDateString();
+            return this.convertInputToNativeDate(this.value).toLocaleDateString(String.locale);
         }
     },
     methods: {
-- 
GitLab