DatePicker
A date (Date) picker component.
Basic Usage
Set type to date (Date) for single date (Date) selection or date (Date)range for date (Date) range selection.
Set placement to control the direction in which the picker appears.
<template>
<div flex="box:mean" style="width: 600px">
<div style="padding: 0 10px">
<div class="demonstration">Basic</div>
<b-date-picker v-model="value1" type="date" placeholder="Select date"></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">With shortcuts</div>
<b-date-picker
v-model="value2"
type="date"
placeholder="Select date"
:disabled-date="disabledDate"
:shortcuts="shortcuts"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const disabledDate = time => time.getTime() > Date.now()
const shortcuts = [
{
text: 'Today',
value: new Date()
},
{
text: 'Yesterday',
value: (() => {
const date = new Date()
date.setTime(date.getTime() - 3600 * 1000 * 24)
return date
})()
},
{
text: 'A week ago',
value: (() => {
const date = new Date()
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
return date
})()
}
]
const value1 = ref('')
const value2 = ref('')
</script>Different Picker Types
Different date (Date) formats can be selected.
<template>
<div flex="box:mean">
<div style="padding: 0 10px">
<div class="demonstration">Year</div>
<b-date-picker v-model="value1" type="year" placeholder="选择Year"></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">周</div>
<b-date-picker
v-model="value2"
type="week"
format="gggg 第 ww 周"
placeholder="选择周"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">Month</div>
<b-date-picker v-model="value3" type="month" placeholder="选择Month"></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">多个Day期</div>
<b-date-picker v-model="value4" type="dates" placeholder="选择一个或多个Day期"></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const value1 = ref('')
const value2 = ref('')
const value3 = ref('')
const value4 = ref('')
</script>Date Range
Set type to date (Date)range for range mode.
<template>
<div flex="box:mean" style="width: 600px">
<div style="padding: 0 10px">
<div class="demonstration">Basic</div>
<b-date-picker
v-model="value1"
type="daterange"
range-separator="To"
start-placeholder="Start date"
end-placeholder="End date"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">With shortcuts</div>
<b-date-picker
v-model="value2"
type="daterange"
unlink-panels
range-separator="To"
start-placeholder="Start date"
end-placeholder="End date"
:shortcuts="shortcuts"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const shortcuts = [
{
text: 'Last week',
value: (() => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
return [start, end]
})()
},
{
text: 'Last month',
value: (() => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
return [start, end]
})()
},
{
text: 'Last 3 months',
value: (() => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
return [start, end]
})()
}
]
const value1 = ref('')
const value2 = ref('')
</script>Month Range
Conveniently select a month range in a single picker.
<template>
<div flex="box:mean" style="width: 600px">
<div style="padding: 0 10px">
<div class="demonstration">Basic</div>
<b-date-picker
v-model="value1"
type="monthrange"
range-separator="to"
start-placeholder="开始Month份"
end-placeholder="结束Month份"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">带快捷option</div>
<b-date-picker
v-model="value2"
type="monthrange"
unlink-panels
range-separator="to"
start-placeholder="开始Month份"
end-placeholder="结束Month份"
:shortcuts="shortcuts"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const shortcuts = [
{
text: '本Month',
value: [new Date(), new Date()]
},
{
text: '今Yearto今',
value: (() => {
const end = new Date()
const start = new Date(new Date().getFullYear(), 0)
return [start, end]
})()
},
{
text: '最近六个Month',
value: (() => {
const end = new Date()
const start = new Date()
start.setMonth(start.getMonth() - 6)
return [start, end]
})()
}
]
const value1 = ref('')
const value2 = ref('')
</script>Default Value
If the user has not selected a date (Date), the current month is shown by default. Use default-value to set a different default date (Date).
<template>
<div flex="box:mean" style="width: 600px">
<div style="padding: 0 10px">
<div class="demonstration">date</div>
<b-date-picker
v-model="value1"
type="date"
placeholder="Pick a date"
:default-value="new Date(2020, 4, 27)"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">daterange</div>
<b-date-picker
v-model="value2"
type="daterange"
start-placeholder="Start Date"
end-placeholder="End Date"
:default-value="[new Date(2020, 1, 1), new Date(2020, 10, 1)]"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const value1 = ref('')
const value2 = ref([])
</script>Disabled State
<template>
<div flex="box:mean" style="width: 600px">
<div style="padding: 0 10px">
<div class="demonstration">date</div>
<b-date-picker
v-model="value1"
type="date"
placeholder="Pick a date"
disabled
:default-value="new Date(2020, 4, 27)"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">daterange</div>
<b-date-picker
v-model="value2"
type="daterange"
start-placeholder="Start Date"
end-placeholder="End Date"
disabled
:default-value="[new Date(2020, 1, 1), new Date(2020, 10, 1)]"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const value1 = ref('')
const value2 = ref([])
</script>Date Format
Use format to specify the input display format. By default, the component accepts and returns Date objects. See dayjs for supported format parameters.
Use value-format to specify the format of the bound value. By default, the component binds a Date object. The format of the bound value will match the return value format.
<template>
<div flex="cross:center">
<div style="padding: 0 10px; width: 500px">
<b-date-picker
v-model="value1"
type="date"
format="YYYY-MM-DD"
placeholder="Select date"
></b-date-picker>
<div>Value: {{ value1 }}</div>
</div>
<div style="padding: 0 10px; width: 500px">
<b-date-picker
v-model="value2"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="Select date"
></b-date-picker>
<div>Value: {{ value2 }}</div>
</div>
</div>
<br />
<div flex="cross:center">
<div style="padding: 0 10px; width: 500px">
<b-date-picker
v-model="value3"
type="daterange"
format="YYYY-MM-DD"
placeholder="Select date"
></b-date-picker>
<div>Value: {{ value3 }}</div>
</div>
<div style="padding: 0 10px; width: 500px">
<b-date-picker
v-model="value4"
type="daterange"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="Select date"
></b-date-picker>
<div>Value: {{ value4 }}</div>
</div>
</div>
<br />
<div flex="cross:center">
<div style="padding: 0 10px; width: 500px">
<b-date-picker v-model="value5" type="datetime" placeholder="Select date"></b-date-picker>
<div>Value: {{ value5 }}</div>
</div>
<div style="padding: 0 10px; width: 500px">
<b-date-picker
v-model="value6"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetime"
placeholder="Select date"
></b-date-picker>
<div>Value: {{ value6 }}</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const value1 = ref('')
const value2 = ref('2024-01-01')
const value3 = ref([])
const value4 = ref(['2024-01-01', '2024-04-30'])
const value5 = ref('')
const value6 = ref('')
</script>Sizes
Like other form controls, four sizes are available.
<template>
<div flex="cross:center box:mean">
<div style="padding: 0 10px">
<b-date-picker
v-model="value1"
type="date"
size="large"
placeholder="Select date"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<b-date-picker v-model="value1" type="date" placeholder="Select date"></b-date-picker>
</div>
<div style="padding: 0 10px">
<b-date-picker
v-model="value1"
size="small"
type="date"
placeholder="Select date"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<b-date-picker
v-model="value1"
size="mini"
type="date"
placeholder="Select date"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const value1 = ref('')
</script>Date & Time
Date and time can be selected together.
<template>
<div flex="cross:center box:mean">
<div style="padding: 0 10px">
<div class="demonstration">Basic</div>
<b-date-picker v-model="value1" type="datetime" placeholder="Select date time"></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">With shortcuts</div>
<b-date-picker
v-model="value2"
type="datetime"
placeholder="Select date time"
:shortcuts="shortcuts"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">Default time</div>
<b-date-picker
v-model="value3"
type="datetime"
placeholder="Select date time"
:default-value="new Date(2000, 1, 1, 12, 0, 0)"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const shortcuts = [
{
text: 'Today',
value: new Date()
},
{
text: 'Yesterday',
value: (() => {
const date = new Date()
date.setTime(date.getTime() - 3600 * 1000 * 24)
return date
})()
},
{
text: 'A week ago',
value: (() => {
const date = new Date()
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
return date
})()
}
]
const value1 = ref('')
const value2 = ref('')
const value3 = ref('')
</script>Date & Time Range
Date and time range configuration.
<template>
<div flex="cross:center box:mean" style="width: 800px">
<div style="padding: 0 10px">
<div class="demonstration">Basic</div>
<b-date-picker
v-model="value1"
type="datetimerange"
range-separator="to"
start-placeholder="开始Day期"
end-placeholder="结束Day期"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">带快捷option</div>
<b-date-picker
v-model="value2"
type="datetimerange"
range-separator="to"
start-placeholder="开始Day期"
end-placeholder="结束Day期"
:shortcuts="shortcuts"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const shortcuts = [
{
text: '最近一周',
value: (() => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
return [start, end]
})()
},
{
text: '最近一个Month',
value: (() => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
return [start, end]
})()
},
{
text: '最近三个Month',
value: (() => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
return [start, end]
})()
}
]
const value1 = ref([new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)])
const value2 = ref('')
</script>Default Start and End Time
Default start and end time
<template>
<div flex="cross:center box:mean" style="width: 800px">
<div style="padding: 0 10px">
<div class="demonstration">起始Day期时刻为 12:00:00</div>
<b-date-picker
v-model="value1"
type="datetimerange"
range-separator="to"
start-placeholder="开始Day期"
end-placeholder="结束Day期"
:default-time="[new Date(2021, 1, 1, 12, 0, 0)]"
></b-date-picker>
</div>
<div style="padding: 0 10px">
<div class="demonstration">起始Day期时刻为 12:00:00,结束Day期时刻为 08:00:00</div>
<b-date-picker
v-model="value2"
type="datetimerange"
range-separator="to"
start-placeholder="开始Day期"
end-placeholder="结束Day期"
:default-time="[new Date(2021, 1, 1, 12, 0, 0), new Date(2021, 2, 1, 8, 0, 0)]"
></b-date-picker>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const value1 = ref('')
const value2 = ref('')
</script>Props
| Parameter | Description | Type | Options | Default |
|---|---|---|---|---|
| value / v-model | Bound value | date (Date)(DatePicker) / array(DateRangePicker) | — | — |
| readonly | Fully read-only | boolean | — | false |
| disabled | Disabled | boolean | — | false |
| editable | Text field is editable | boolean | — | true |
| clearable | Show clear button | boolean | — | true |
| size | Input size | string | large/medium/small/mini | large |
| placeholder | Placeholder for non-range selection | string | — | — |
| start-placeholder | Placeholder for start date in range selection | string | — | — |
| end-placeholder | Placeholder for end date in range selection | string | — | — |
| type | Picker type | string | year/month/date (Date)/date (Date)s/ week/date (Date)time/date (Date)timerange/ date (Date)range/monthrange | date (Date) |
| format | Display format in the input | string | YYYY MM DD hh mm ss | YYYY-MM-DD |
| value-format | Format of the actual bound value. Note: must follow ISO 8601 format for parsing the given string | string | YYYY MM DD hh mm ss | — |
| popper-class | Custom class name for DatePicker dropdown | string | — | — |
| range-separator | Separator for range selection | string | — | '-' |
| default-value | Optional, default date displayed when the picker opens | Date | Parseable by new Date() | — |
| default-time | The specific time of day used when selecting a date in range selection | Date[] | Array of length 2, the first specifies the start time, the second specifies the end time. Defaults to 00:00:00 if not specified | — |
| unlink-panels | Unlink the two date panels in the range picker | boolean | — | false |
| prefix-icon | Custom prefix icon class name | string | — | — |
| clear-icon | Custom clear icon class name | string | — | — |
| validate-event | Whether to trigger form validation on input | boolean | - | true |
| shortcuts | Set shortcut options, requires an array of objects | object[{ text: string, value: Date }] | — | — |
| disabledDate | Set disabled state. Parameter is the current date, must return a Boolean | Function | — | — |
Events
| Event Name | Description | Callback Parameters |
|---|---|---|
| change | Triggers when the user confirms the selected value | Component bound value |
| blur | Triggers when input loses focus | Component instance |
| focus | Triggers when input gains focus | Component instance |
Methods
| Method Name | Description | Parameter |
|---|---|---|
| focus | Make input gain focus | — |