Skip to content

Commit bcdc8ce

Browse files
committed
feat(project): add custom parser
1 parent 9d790da commit bcdc8ce

File tree

4 files changed

+35
-16
lines changed

4 files changed

+35
-16
lines changed

docs/.vuepress/components/Formatting.vue

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
<template>
22
<div class="example">
3-
<Datepicker :format="format"/>
4-
<code>
5-
&lt;datepicker :format="format"&gt;&lt;/datepicker&gt;
6-
</code>
73
<div class="settings">
84
<h5>Settings</h5>
95
<Format
106
@selected="selected"
117
:format-init="format"
128
/>
139
</div>
14-
15-
<Datepicker :format="customFormatter" :typeable="true"/>
10+
<h3>Default formatter</h3>
11+
<Datepicker :format="format"/>
12+
<code>
13+
&lt;Datepicker :format="format"/&gt;
14+
</code>
15+
<h3>Custom formatter</h3>
16+
<Datepicker :format="customFormatter" :parser="customParser" :typeable="true"/>
1617
<code>
17-
&lt;datepicker :format="format"&gt;&lt;/datepicker&gt;
18+
&lt;Datepicker :format="customFormatter" :parser="customParser"/&gt;
1819
</code>
1920
</div>
2021
</template>
2122

2223
<script>
2324
import Format from '../../../docs/.vuepress/components/Formats'
24-
import { format } from "date-fns";
25+
import { format, parse } from "date-fns";
2526
2627
export default {
2728
name: 'Formatting',
@@ -38,7 +39,10 @@ export default {
3839
this.format = newVal
3940
},
4041
customFormatter(date) {
41-
return format(new Date(date), "dd.MM.yyyy");
42+
return format(date, this.format)
43+
},
44+
customParser(date) {
45+
return parse(date, this.format, new Date())
4246
}
4347
},
4448
}

docs/guide/DateFormatting/README.md

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,29 @@ Function will be called with date and it has to return the formatted date as a s
2424
This allow us to use moment, date-fns, globalize or any other library to format date.
2525
Be aware of the fact that if you use a typeable datepicker the formatting function will be
2626
triggered on every input change.
27+
The function formatter needs a custom parser to parse the formatted date back to date object.
2728

29+
Here is an example for date-fns:
2830
```vue
2931
<template>
30-
<DatePicker :format="customFormatter"></DatePicker>
32+
<DatePicker :format="customFormatter" :parser="customParser"></DatePicker>
3133
</template>
3234
<script>
33-
import { format } from "date-fns";
35+
import { format, parse } from "date-fns";
3436
export default {
35-
methods: {
36-
customFormatter(date) {
37-
return format(new Date(date), "dd-MM-yyyy");
38-
}
39-
}
37+
data() {
38+
return {
39+
format: 'dd.MM.yyyy',
40+
}
41+
},
42+
methods: {
43+
customFormatter(date) {
44+
return format(date, this.format)
45+
},
46+
customParser(date) {
47+
return parse(date, this.format, new Date())
48+
}
49+
},
4050
}
4151
</script>
4252
```

src/components/Datepicker.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
:selected-date="selectedDate"
99
:reset-typed-date="resetTypedDate"
1010
:format="format"
11+
:parser="parser"
1112
:translation="translation"
1213
:inline="inline"
1314
:name="name"

src/mixins/inputProps.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ export default ({
88
],
99
default: 'dd MMM yyyy',
1010
},
11+
parser: {
12+
type: Function,
13+
default: null,
14+
},
1115
id: {
1216
type: String,
1317
default: null,

0 commit comments

Comments
 (0)