diff --git a/client/components/cards/cardDate.js b/client/components/cards/cardDate.js index aa73439bd..d247fe6d8 100644 --- a/client/components/cards/cardDate.js +++ b/client/components/cards/cardDate.js @@ -1,3 +1,8 @@ +// Helper function to replace HH with H for 24 hours format, because H allows also single-digit hours +function adjustedTimeFormat() { + return moment.localeData().longDateFormat('LT').replace(/HH/i, 'H'); +} + // Edit received, start, due & end dates BlazeComponent.extendComponent({ template() { @@ -59,7 +64,7 @@ BlazeComponent.extendComponent({ }, 'keyup .js-time-field'() { // parse for localized time format in strict mode - const dateMoment = moment(this.find('#time').value, 'LT', true); + const dateMoment = moment(this.find('#time').value, adjustedTimeFormat(), true); if (dateMoment.isValid()) { this.error.set(''); } @@ -71,16 +76,26 @@ BlazeComponent.extendComponent({ const time = evt.target.time.value || moment(new Date().setHours(12, 0, 0)).format('LT'); - + const newTime = moment(time, adjustedTimeFormat(), true); + const newDate = moment(evt.target.date.value, 'L', true); const dateString = `${evt.target.date.value} ${time}`; - const newDate = moment(dateString, 'L LT', true); - if (newDate.isValid()) { - this._storeDate(newDate.toDate()); - Popup.close(); - } else { + const newCompleteDate = moment(dateString, 'L ' + adjustedTimeFormat(), true); + if (!newTime.isValid()) { + this.error.set('invalid-time'); + evt.target.time.focus(); + } + if (!newDate.isValid()) { this.error.set('invalid-date'); evt.target.date.focus(); } + if (newCompleteDate.isValid()) { + this._storeDate(newCompleteDate.toDate()); + Popup.close(); + } else { + if (!this.error){ + this.error.set('invalid'); + } + } }, 'click .js-delete-date'(evt) { evt.preventDefault(); diff --git a/client/lib/datepicker.js b/client/lib/datepicker.js index aa05310c2..de3986157 100644 --- a/client/lib/datepicker.js +++ b/client/lib/datepicker.js @@ -1,3 +1,8 @@ +// Helper function to replace HH with H for 24 hours format, because H allows also single-digit hours +function adjustedTimeFormat() { + return moment.localeData().longDateFormat('LT').replace(/HH/i, 'H'); +} + DatePicker = BlazeComponent.extendComponent({ template() { return 'datepicker'; @@ -77,7 +82,7 @@ DatePicker = BlazeComponent.extendComponent({ }, 'keyup .js-time-field'() { // parse for localized time format in strict mode - const dateMoment = moment(this.find('#time').value, 'LT', true); + const dateMoment = moment(this.find('#time').value, adjustedTimeFormat(), true); if (dateMoment.isValid()) { this.error.set(''); } @@ -89,16 +94,26 @@ DatePicker = BlazeComponent.extendComponent({ const time = evt.target.time.value || moment(new Date().setHours(12, 0, 0)).format('LT'); - + const newTime = moment(time, adjustedTimeFormat(), true); + const newDate = moment(evt.target.date.value, 'L', true); const dateString = `${evt.target.date.value} ${time}`; - const newDate = moment(dateString, 'L LT', true); - if (newDate.isValid()) { - this._storeDate(newDate.toDate()); - Popup.close(); - } else { + const newCompleteDate = moment(dateString, 'L ' + adjustedTimeFormat(), true); + if (!newTime.isValid()) { + this.error.set('invalid-time'); + evt.target.time.focus(); + } + if (!newDate.isValid()) { this.error.set('invalid-date'); evt.target.date.focus(); } + if (newCompleteDate.isValid()) { + this._storeDate(newCompleteDate.toDate()); + Popup.close(); + } else { + if (!this.error){ + this.error.set('invalid'); + } + } }, 'click .js-delete-date'(evt) { evt.preventDefault();