Skip to content

Commit

Permalink
Merge 14f3848 into bf28bca
Browse files Browse the repository at this point in the history
  • Loading branch information
barbosaalr committed Nov 19, 2018
2 parents bf28bca + 14f3848 commit eb39c8d
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 4 deletions.
45 changes: 41 additions & 4 deletions src/components/DateInput.vue
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,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))
}
}
},
Expand All @@ -130,7 +131,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
Expand All @@ -143,6 +145,41 @@ 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 () {
Expand Down
42 changes: 42 additions & 0 deletions test/unit/specs/DateInput/typedDates.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,48 @@ describe('DateInput', () => {
expect(wrapper.vm.formattedValue).toEqual(dateString)
})

it('allows international custom date format d.M.yyyy', () => {
const dateString = '24.06.2018'
wrapper.setProps({
selectedDate: new Date(dateString),
typeable: true,
format: 'd.M.yyyy'
})
const input = wrapper.find('input')
wrapper.vm.input.value = dateString
expect(wrapper.vm.input.value).toEqual(dateString)
input.trigger('keyup')
expect(wrapper.vm.formattedValue).toEqual(dateString)
})

it('allows international custom date format dd/MM/yyyy', () => {
const dateString = '24/06/2018'
wrapper.setProps({
selectedDate: new Date(dateString),
typeable: true,
format: 'dd/MM/yyyy'
})
const input = wrapper.find('input')
wrapper.vm.input.value = dateString
expect(wrapper.vm.input.value).toEqual(dateString)
input.trigger('keyup')
expect(wrapper.vm.formattedValue).toEqual(dateString)
})

it('allows international custom date format dd MM yyyy', () => {
const dateString = '24 06 2018'
wrapper.setProps({
selectedDate: new Date(dateString),
typeable: true,
format: 'dd MM yyyy'
})
const input = wrapper.find('input')
wrapper.vm.input.value = dateString
expect(wrapper.vm.input.value).toEqual(dateString)
input.trigger('keyup')
expect(wrapper.vm.formattedValue).toEqual(dateString)
})

it('emits the date when typed', () => {
const input = wrapper.find('input')
wrapper.vm.input.value = '2018-04-24'
Expand Down

0 comments on commit eb39c8d

Please sign in to comment.