Компонент v-date-picker в Vuetify
предназначен для выбора даты и удобного взаимодействия с календарем. Он
поддерживает как одиночный выбор даты, так и диапазоны, а также
интегрируется с формами и другими элементами пользовательского
интерфейса.
Ключевые свойства:
v-model — двусторонняя привязка
выбранной даты.type — определяет тип выбора:
'date', 'month', 'year' или
'range'.min и
max — задают минимальные и максимальные
даты для ограничения выбора.locale — локализация календаря,
например 'ru' для русского языка.readonly — делает компонент только для
чтения, запрет выбора даты.disabled — полностью блокирует
взаимодействие.Пример базовой реализации:
<template>
<v-date-picker v-model="selectedDate" :min="minDate" :max="maxDate"></v-date-picker>
</template>
<script>
export default {
data() {
return {
selectedDate: null,
minDate: '2026-01-01',
maxDate: '2026-12-31'
}
}
}
</script>
Для выбора диапазона используется тип 'range'. При этом
v-model связывается с объектом вида
{ start: 'YYYY-MM-DD', end: 'YYYY-MM-DD' }. Можно
ограничивать диапазон минимальной и максимальной датой, а также
кастомизировать визуальное отображение выбранного периода.
Пример:
<v-date-picker
v-model="dateRange"
type="range"
:min="minDate"
:max="maxDate"
></v-date-picker>
<script>
export default {
data() {
return {
dateRange: { start: null, end: null },
minDate: '2026-01-01',
maxDate: '2026-12-31'
}
}
}
</script>
Для корректного отображения дат в локализованном формате применяется
свойство locale. Дополнительно можно
управлять форматом вывода через слоты и фильтры.
Пример с русской локализацией:
<v-date-picker
v-model="selectedDate"
locale="ru"
></v-date-picker>
Возможные значения locale: 'en',
'ru', 'fr', 'de' и другие.
v-date-picker поддерживает кастомизацию
отдельных частей через слоты:
day — позволяет изменить отображение
дней календаря.header — кастомизация заголовка с
месяцем и годом.actions — настройка кнопок
подтверждения и отмены.Пример изменения внешнего вида дней:
<v-date-picker v-model="selectedDate">
<template #day="{ day, outside }">
<div :class="{ 'special-day': day === '2026-03-17' }">{{ day }}</div>
</template>
</v-date-picker>
Для ограничения выбора дат применяются
allowed-dates и
min/max. Свойство
allowed-dates принимает функцию, которая
возвращает true для разрешённых дат и false
для запрещённых. Это удобно для создания сложной логики выбора, например
рабочих дней или праздников.
Пример запрета выходных:
<v-date-picker
v-model="selectedDate"
:allowed-dates="isWeekday"
></v-date-picker>
<script>
export default {
methods: {
isWeekday(date) {
const day = new Date(date).getDay()
return day !== 0 && day !== 6
}
}
}
</script>
v-date-picker легко интегрируется с
формами Vuetify через v-form и валидацию.
Можно использовать стандартные правила валидации:
<v-form ref="form">
<v-date-picker
v-model="selectedDate"
:rules="[dateRequired]"
></v-date-picker>
</v-form>
<script>
export default {
data() {
return {
selectedDate: null
}
},
methods: {
dateRequired(value) {
return !!value || 'Выбор даты обязателен'
}
}
}
</script>
Для выбора времени используется
v-time-picker, который может быть встроен
совместно с v-date-picker для создания
комплексного выбора даты и времени. В связке можно использовать
модальные окна и диалоги для более компактного интерфейса.
Пример комбинированного выбора даты и времени:
<v-dialog v-model="dialog" persistent width="290px">
<template #activator="{ props }">
<v-text-field v-model="dateTime" readonly v-bind="props"></v-text-field>
</template>
<v-date-picker v-model="date" @change="onDateChange">
<v-time-picker v-if="showTime" v-model="time"></v-time-picker>
</v-date-picker>
</v-dialog>
Vuetify позволяет легко менять визуальный стиль календаря через
theme, color и кастомные CSS классы.
Применение цвета к выбранной дате или диапазону делается через свойство
color:
<v-date-picker v-model="selectedDate" color="primary"></v-date-picker>
Для отдельных дней можно использовать динамические классы через слот
day для выделения праздников, выходных или специальных
событий.
Компонент поддерживает динамическое изменение доступных дат и диапазонов через реактивные свойства Vue. Это позволяет подгружать события с сервера и блокировать или подсвечивать дни в зависимости от данных.
Пример подсветки занятых дат:
<v-date-picker
v-model="selectedDate"
:allowed-dates="dateAvailable"
>
<template #day="{ day }">
<div :class="{ 'occupied-day': occupiedDates.includes(day) }">{{ day }}</div>
</template>
</v-date-picker>
<script>
export default {
data() {
return {
selectedDate: null,
occupiedDates: ['2026-03-10', '2026-03-15']
}
},
methods: {
dateAvailable(date) {
return !this.occupiedDates.includes(date)
}
}
}
</script>
Основные события v-date-picker:
@input — вызывается при выборе
даты.@change — вызывается при подтверждении
выбора.@update:modelValue — реактивное
обновление v-model.@dayclick — клик по конкретному дню
календаря.Эти события позволяют создавать сложные сценарии, например, динамическую подгрузку данных или синхронизацию с другими компонентами интерфейса.