Skip to content

WeDatePicker

A versatile date and time picker component that wraps vuepic/vue-datepicker with Vuetify integration. Supports date, time, datetime selection with various formatting options, validation rules, and range selection.

Usage

vue
<template>
  <!-- Basic date picker -->
  <WeDatePicker
    v-model="selectedDate"
    label="Select Date"
  />
  
  <!-- Time picker -->
  <WeDatePicker
    v-model="selectedTime"
    type="time"
    label="Select Time"
  />
  
  <!-- DateTime picker -->
  <WeDatePicker
    v-model="selectedDateTime"
    type="datetime"
    label="Select Date and Time"
  />
  
  <!-- Date range picker -->
  <WeDatePicker
    v-model="dateRange"
    range
    label="Select Date Range"
  />
  
  <!-- With validation -->
  <WeDatePicker
    v-model="appointmentDate"
    label="Appointment Date"
    :rules="[validatorRequired]"
  />
</template>

Props

PropTypeDefaultDescription
modelValueString | Arrayundefinedv-model value (formatted date string or array for range)
typeString'date'Picker type: 'date', 'time', or 'datetime'
minDateString | DatenullMinimum selectable date
maxDateString | DatenullMaximum selectable date
minTimeString | DatenullMinimum selectable time
maxTimeString | DatenullMaximum selectable time
localeString'it'Localization for the calendar
rangeBooleanfalseEnable date range selection
monthChangeOnArrowsBooleantrueNavigate between months using arrow keys
showSecondsBooleanfalseShow seconds in time picker
clearableBooleanfalseAllow clearing the input
rulesArray[]Validation rules (compatible with Vuetify)

Note: The component also accepts all Vuetify v-text-field props through v-bind="$attrs" Note: The component also accepts all Vvuepic/vue-datepicker props through v-bind="$attrs"

Events

EventPayloadDescription
update:modelValueString | ArrayEmitted when the date selection changes

Format Handling

The component handles two types of formats:

  1. Display Format: How dates are shown to the user

    • Date: dd/MM/yyyy
    • Time: HH:mm (or HH:mm:ss with showSeconds)
    • DateTime: dd/MM/yyyy HH:mm (or dd/MM/yyyy HH:mm:ss with showSeconds)
  2. Model Format: How dates are stored in the model

    • Date: yyyy-MM-dd
    • Time: HH:mm (or HH:mm:ss with showSeconds)
    • DateTime: yyyy-MM-dd HH:mm (or yyyy-MM-dd HH:mm:ss with showSeconds)

Examples

Basic Date Selection

vue
<script setup>
import { ref } from 'vue'

const selectedDate = ref(null)
</script>

<template>
  <WeDatePicker
    v-model="selectedDate"
    label="Select Date"
    clearable
  />
  
  <div v-if="selectedDate">
    Selected date: {{ selectedDate }} <!-- Will be in yyyy-MM-dd format -->
  </div>
</template>

Time Selection

vue
<script setup>
import { ref } from 'vue'

const meetingTime = ref(null)
</script>

<template>
  <WeDatePicker
    v-model="meetingTime"
    type="time"
    label="Meeting Time"
    show-seconds
  />
</template>

Date Range for Booking

vue
<script setup>
import { ref } from 'vue'
import { useValidators } from '#imports'

const { validatorRequired } = useValidators()
const bookingDateRange = ref(null) // Will be an array of two dates

const rules = [
  validatorRequired
]
</script>

<template>
  <WeDatePicker
    v-model="bookingDateRange"
    label="Booking Period"
    range
    :rules="rules"
  />
</template>

Date Constraints

vue
<script setup>
import { ref } from 'vue'

// Don't allow selecting dates before today or after one year from now
const today = new Date()
const nextYear = new Date(today)
nextYear.setFullYear(nextYear.getFullYear() + 1)

const constrainedDate = ref(null)
</script>

<template>
  <WeDatePicker
    v-model="constrainedDate"
    label="Select Date (Limited Range)"
    :min-date="today"
    :max-date="nextYear"
  />
</template>

Advanced DateTime Selector

vue
<script setup>
import { ref } from 'vue'

const appointmentDateTime = ref(null)
const workHoursStart = { hours: '09', minutes: '00' }
const workHoursEnd = { hours: '17', minutes: '00' }
</script>

<template>
  <WeDatePicker
    v-model="appointmentDateTime"
    type="datetime"
    label="Appointment Date & Time"
    :min-time="workHoursStart"
    :max-time="workHoursEnd"
    clearable
  />
</template>

Source Code