diff --git a/frontend/src/utils/form/datepicker.js b/frontend/src/utils/form/datepicker.js index 2a32f5a99..11d7394bc 100644 --- a/frontend/src/utils/form/datepicker.js +++ b/frontend/src/utils/form/datepicker.js @@ -26,21 +26,25 @@ const FORM_DATE_FORMAT_MOMENT = { /** * Takes a string representation of a date and a format string and parses the given date to a Date object. + * If the date string is not valid (i.e. cannot be parsed with the given format string), returns undefined. * @param {*} dateStr string representation of a date * @param {*} dateFormat format string of the date */ function parseDateWithFormat(dateStr, dateFormat) { - return moment(dateStr, dateFormat).toDate(); + const parsedMomentDate = moment(dateStr, dateFormat); + if (parsedMomentDate.isValid()) return parsedMomentDate.toDate(); } /** * Takes a string representation of a date, an input ('previous') format and a desired output format and returns a reformatted date string. + * If the date string is not valid (i.e. cannot be parsed with the given input format string), returns the original date string; * @param {*} dateStr string representation of a date (needs to be in format formatIn) * @param {*} formatIn input format string * @param {*} formatOut format string of the desired output date string */ function reformatDateString(dateStr, formatIn, formatOut) { - return moment(dateStr, formatIn).format(formatOut); + const parsedMomentDate = moment(dateStr, formatIn); + return parsedMomentDate.isValid() ? parsedMomentDate.format(formatOut) : dateStr; } const DATEPICKER_UTIL_SELECTOR = 'input[type="date"], input[type="time"], input[type="datetime-local"]'; @@ -200,7 +204,8 @@ export class Datepicker { const dp = this.datepickerInstance; if (this._element.value) { if (toFancy) { - dp.selectDate(parseDateWithFormat(this._element.value, FORM_DATE_FORMAT[this.elementType])); + const parsedDate = parseDateWithFormat(this._element.value, FORM_DATE_FORMAT[this.elementType]); + if (parsedDate) dp.selectDate(); } else { this._element.value = this.unformat(); }