From 66b7ac9b841156a5b4a0ae0a8a932723d478d559 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 13 Jul 2022 09:06:32 +0200 Subject: [PATCH] Bug 31149: Use dayjs to parse dates We can use the isValid's dayjs function instead of our own parsing functions. Test plan: Confirm that you cannot enter an invalid date when using a date picker widget. Works as expected. Signed-off-by: Paul Derscheid Signed-off-by: Martin Renvoize --- .../prog/en/includes/calendar.inc | 1 + koha-tmpl/intranet-tmpl/prog/js/calendar.js | 45 ++++++------------- 2 files changed, 14 insertions(+), 32 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/calendar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/calendar.inc index 1437f2e157f..cd498a00c6d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/calendar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/calendar.inc @@ -37,6 +37,7 @@ var flatpickr_timeformat = [% IF Koha.Preference('TimeFormat') == '12hr' %]false[% ELSE %]true[% END %]; + [% Asset.js("lib/dayjs/dayjs.min.js") | $raw %] [% Asset.js("js/calendar.js") | $raw %] [% Asset.js("lib/flatpickr/flatpickr.min.js") | $raw %] [% Asset.js("lib/flatpickr/shortcut-buttons-flatpickr.min.js") | $raw %] diff --git a/koha-tmpl/intranet-tmpl/prog/js/calendar.js b/koha-tmpl/intranet-tmpl/prog/js/calendar.js index e1637b2ba71..80f0b04d99c 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/calendar.js +++ b/koha-tmpl/intranet-tmpl/prog/js/calendar.js @@ -9,29 +9,12 @@ if (debug > 1) { ); } -function is_valid_date(date) { - // An empty string is considered as a valid date for convenient reasons. - if (date === "") return 1; - var dateformat = flatpickr_dateformat_string; - if (dateformat == "us") { - if (date.search(/^\d{2}\/\d{2}\/\d{4}($|\s)/) == -1) return 0; - dateformat = "m/d/Y"; - } else if (dateformat == "metric") { - if (date.search(/^\d{2}\/\d{2}\/\d{4}($|\s)/) == -1) return 0; - dateformat = "d/m/Y"; - } else if (dateformat == "iso") { - if (date.search(/^\d{4}-\d{2}-\d{2}($|\s)/) == -1) return 0; - dateformat = "Y-m-d"; - } else if (dateformat == "dmydot") { - if (date.search(/^\d{2}\.\d{2}\.\d{4}($|\s)/) == -1) return 0; - dateformat = "d.m.Y"; - } - try { - flatpickr.parseDate(date, dateformat); - } catch (e) { - return 0; - } - return 1; +function is_valid_date(dateText) { + return dayjs( + dateText, + get_dateformat_str(dateformat_pref).toUpperCase(), + true + ).isValid(); } function get_dateformat_str(dateformat) { @@ -64,20 +47,18 @@ function Date_from_syspref(dstring) { "Date_from_syspref(" + dstring + ") splits to:\n" + dateX.join("\n") ); } - if (dateformat_pref === "iso") { - return new Date(dateX[0], dateX[1] - 1, dateX[2]); // YYYY-MM-DD to (YYYY,m(0-11),d) - } else if (dateformat_pref === "us") { - return new Date(dateX[2], dateX[0] - 1, dateX[1]); // MM/DD/YYYY to (YYYY,m(0-11),d) - } else if (dateformat_pref === "metric") { - return new Date(dateX[2], dateX[1] - 1, dateX[0]); // DD/MM/YYYY to (YYYY,m(0-11),d) - } else if (dateformat_pref === "dmydot") { - return new Date(dateX[2], dateX[1] - 1, dateX[0]); // DD.MM.YYYY to (YYYY,m(0-11),d) - } else { + let d = dayjs( + dstring, + get_dateformat_str(dateformat_pref).toUpperCase(), + true + ); + if (!d.isValid()) { if (debug > 0) { alert("KOHA ERROR - Unrecognized date format: " + dateformat_pref); } return 0; } + return d.toDate(); } function DateTime_from_syspref(date_time) { -- 2.39.5