Календарь используется как контролируемый компонент ввода с пропсом v-model.
value:
Формат даты по умолчанию — mm/dd/yy, который можно настроить с помощью пропса dateFormat. Следующие параметры могут быть частью формата.
value:
Границы для разрешенных дат, которые могут быть введены, определены пропсами minDate и maxDate.
value:
<script lang="ts" setup>
// non-reactive
const { minDate, maxDate } = ((today) => {
const month = today.getMonth();
const year = today.getFullYear();
const min = new Date(today);
const max = new Date(today);
min.setMonth(month === 0 ? 11 : month - 1);
min.setFullYear(month === 0 ? year - 1 : year);
max.setMonth(month === 11 ? 0 : month + 1);
max.setFullYear(month === 11 ? year + 1 : year);
return { minDate: min, maxDate: max };
})(new Date());
// end non-reactive
const value = ref();
</script>
<template>
<div class="row justify-content-center">
<div class="col-6">
<BCalendar
class="mb-3"
v-model="value"
date-format="dd.mm.yy"
placeholder="06.12.2024"
:min-date="minDate"
:max-date="maxDate"
input-mask
/>
<pre class="mb-0">value: {{ value }}</pre>
</div>
</div>
</template> Маска ввода будет строиться по типу даты переданному в пропсе date-format или будет браться стандартное его значение mm/dd/yy. Так же стоит отметить, что manual-input пропс должен быть пропущен или не быть falsy.
value:
value:
value:
<script lang="ts" setup>
const date = ref();
const datetime = ref();
const time = ref();
</script>
<template>
<div class="row justify-content-center">
<div class="col-4">
<BFormLabel>Только дата</BFormLabel>
<BCalendar class="mb-3" v-model="date" date-format="dd.mm.yy" placeholder="06.12.2024" input-mask />
<pre class="mb-0">value: {{ date }}</pre>
</div>
<div class="col-4">
<BFormLabel>Дата и время</BFormLabel>
<BCalendar
class="mb-3"
v-model="datetime"
date-format="dd.mm.yy"
placeholder="06.12.2024 00:00:00"
show-time
show-seconds
input-mask
/>
<pre class="mb-0">value: {{ datetime }}</pre>
</div>
<div class="col-4">
<BFormLabel>Только время</BFormLabel>
<BCalendar class="mb-3" v-model="time" placeholder="00:00:00" time-only show-seconds input-mask />
<pre class="mb-0">value: {{ time }}</pre>
</div>
</div>
</template> Диапазон дат можно выбрать, определив пропс selectMode="range". В этом случае связанное значение будет массивом с двумя значениями, где первая дата — это начало диапазона, а вторая дата — конец.
value:
Если пропс show-button-bar передан, в нижней панели отображаются кнопки «Сегодня» и «Очистить».
value:
Сборщик времени отображается если задан пропс showTime, где формат 12/24 часа настроен пропсом hourFormat. В случае, если нужно выбрать только время, объявите пропс timeOnly, чтобы скрыть раздел даты.
value:
value:
value:
value: Sat Jun 28 2025 19:18:15 GMT+0300 (Москва, стандартное время)
<script lang="ts" setup>
const customCalendarRef = ref();
const customCalendarTime = reactive(useCalendarTime(customCalendarRef, new Date(2025, 5, 28, 19, 18, 15)));
const customCalendarTimeInputMask = reactive(
customCalendarTime.createInputMask({
mask: '99:99'
})
);
const value12h = ref();
const value24h = ref();
const valueTime = ref();
</script>
<template>
<div class="row justify-content-center gy-3">
<div class="col-6">
<BFormLabel>12ч формат</BFormLabel>
<BCalendar class="mb-3" v-model="value12h" show-time hour-format="12" date-format="dd.mm.yy" />
<pre class="mb-0">value: {{ value12h }}</pre>
</div>
<div class="col-6">
<BFormLabel>24ч формат</BFormLabel>
<BCalendar class="mb-3" v-model="value24h" show-time hour-format="24" date-format="dd.mm.yy" />
<pre class="mb-0">value: {{ value24h }}</pre>
</div>
<div class="col-6">
<BFormLabel>Только время</BFormLabel>
<BCalendar class="mb-3" v-model="valueTime" time-only show-seconds />
<pre class="mb-0">value: {{ valueTime }}</pre>
</div>
<div class="col-6">
<BFormLabel>Кастомный timepicker</BFormLabel>
<BCalendar
ref="customCalendarRef"
class="mb-3"
v-model="customCalendarTime.modelValue"
date-format="dd.mm.yy"
hour-format="24"
show-time
>
<template #timepicker="{ attrs }">
<div class="flex-column gap-2" v-bind="attrs">
<div>
<BInputMask placeholder="Время" v-bind="customCalendarTimeInputMask" />
</div>
<BButtonGroup>
<BButton size="sm" label="+5 мин" severity="primary" @click="customCalendarTime.doAction('minute', 5)" />
<BButton
size="sm"
label="+10 мин"
severity="primary"
@click="customCalendarTime.doAction('minute', 10)"
/>
<BButton
size="sm"
label="+30 мин"
severity="primary"
@click="customCalendarTime.doAction('minute', 30)"
/>
<BButton size="sm" label="+1 час" severity="primary" @click="customCalendarTime.doAction('hour', 1)" />
<BButton size="sm" label="+1 сутки" severity="primary" @click="customCalendarTime.doAction('date', 1)" />
</BButtonGroup>
</div>
</template>
</BCalendar>
<pre class="mb-0">value: {{ customCalendarTime.modelValue }}</pre>
</div>
</div>
</template>Calendar is used a controlled input component with v-model property.
| П | В | С | Ч | П | С | В |
|---|---|---|---|---|---|---|
| 27 | 28 | 29 | 30 | 31 | 1 | 2 |
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
value:
| П | В | С | Ч | П | С | В |
|---|---|---|---|---|---|---|
| 27 | 28 | 29 | 30 | 31 | 1 | 2 |
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| П | В | С | Ч | П | С | В |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
value:
Calendar is used a controlled input component with v-model property.
value: Wed Nov 05 2025 23:00:34 GMT+0300 (Москва, стандартное время)
<script lang="ts" setup>
const date = ref(new Date());
</script>
<template>
<div class="row justify-content-center gy-3">
<div class="col-6">
<BCalendar class="mb-3" v-model="date" date-format="dd.mm.yy" disabled />
<pre class="mb-0">value: {{ date }}</pre>
</div>
</div>
</template>