diff --git a/src/components/DateInput.vue b/src/components/DateInput.vue index 843e1d94..1fe5ab6d 100644 --- a/src/components/DateInput.vue +++ b/src/components/DateInput.vue @@ -119,9 +119,11 @@ export default { if (this.typeable) { const typedDate = Date.parse(this.input.value) - if (!isNaN(typedDate)) { + var parseableDate = this.parseableDate(this.input.value, this.format) + var parsedDate = Date.parse(parseableDate) + if (!isNaN(parsedDate)) { this.typedDate = this.input.value - this.$emit('typedDate', new Date(this.typedDate)) + this.$emit('typedDate', new Date(parsedDate)) } } }, @@ -130,7 +132,8 @@ export default { * called once the input is blurred */ inputBlurred () { - if (this.typeable && isNaN(Date.parse(this.input.value))) { + var parseableDate = this.parseableDate(this.input.value, this.format) + if (isNaN(Date.parse(parseableDate))) { this.clearDate() this.input.value = null this.typedDate = null @@ -143,7 +146,37 @@ export default { */ clearDate () { this.$emit('clearDate') - } + }, + /** + * makes date parseable + * to use with international dates + */ + parseableDate (datestr, formatstr) { + if (!(datestr && formatstr)) { return datestr } + var splitter = formatstr.match(/-|\/|\s|\./) || ['-'] + var df = formatstr.split(splitter[0]) + var ds = datestr.split(splitter[0]) + var ymd = [0, 0, 0] + var dat + for (var i = 0; i < df.length; i++) { + if (/yyyy/i.test(df[i])) { + ymd[0] = ds[i] + } else if (/mm/i.test(df[i])) { + ymd[1] = ds[i] + } else if (/m/i.test(df[i])) { + ymd[1] = ds[i] + } else if (/dd/i.test(df[i])) { + ymd[2] = ds[i] + } else if (/d/i.test(df[i])) { + ymd[2] = ds[i] + } + } + var timezone = new Date().toString().split(' ') + dat = ymd.join('-') + 'T00:00:00' + timezone[5].substr(3, 5) // include timezone to avoid wrong dates after parse + if (isNaN(Date.parse(dat))) { + return datestr + } + return dat }, mounted () { this.input = this.$el.querySelector('input')