Skip to content

Calendar

calendar

Rule

Basic Example

js
const rule = {
    type: 'calendar',
    title: 'Date Selection',
    field: 'date',
    value: '2024-06-11',
    props: {
        placeholder: 'Select',
    }
}

Props Configuration Examples

Single Date Selection (single)

js
const rule = {
    type: 'calendar',
    title: 'Event Date',
    field: 'date',
    value: '2024-06-11',
    props: {
        type: 'single',
        placeholder: 'Please select date',
        minDate: new Date(2024, 0, 1),
        maxDate: new Date(2024, 11, 31),
    }
}

Multiple Date Selection (multiple)

js
const rule = {
    type: 'calendar',
    title: 'Multiple Date Selection',
    field: 'dates',
    value: ['2024-06-11', '2024-07-11', '2024-07-12'],
    props: {
        type: 'multiple',
        placeholder: 'Please select multiple dates',
        minDate: new Date(2024, 5, 10),
    }
}

Date Range Selection (range)

js
const rule = {
    type: 'calendar',
    title: 'Date Range',
    field: 'dateRange',
    value: ['2024-06-11', '2024-07-11'],
    props: {
        type: 'range',
        placeholder: 'Please select date range'
    }
}

Month Switch Mode

js
const rule = {
    type: 'calendar',
    title: 'Date Selection',
    field: 'date',
    value: '2024-06-11',
    props: {
        switchMode: 'month',
        placeholder: 'Please select date',
    }
}

Limit Date Range

js
const rule = {
    type: 'calendar',
    title: 'Appointment Date',
    field: 'date',
    value: '',
    props: {
        placeholder: 'Please select date',
        minDate: new Date(),
        maxDate: new Date(2025, 11, 31),
    }
}

Events Examples

Listen to Date Changes

js
const rule = {
    type: 'calendar',
    title: 'Event Date',
    field: 'date',
    value: '',
    props: {
        placeholder: 'Please select date',
    },
    on: {
        select: (value) => {
            console.log('Date selected:', value);
        },
        confirm: (value) => {
            console.log('Selection confirmed:', value);
        },
        open: () => {
            console.log('Calendar opened');
        },
        close: () => {
            console.log('Calendar closed');
        },
    },
}

Date Range Linkage Validation

js
const rule = [
    {
        type: 'calendar',
        title: 'Start Date',
        field: 'startDate',
        value: '',
        props: {
            type: 'single',
            placeholder: 'Please select start date',
        },
        inject: true,
        on: {
            confirm: ($inject, value) => {
                // Ensure end date is after start date
                const endDate = $inject.api.getValue('endDate');
                if (endDate && new Date(value) >= new Date(endDate)) {
                    $inject.api.setFieldError('endDate', 'End date must be later than start date');
                } else {
                    $inject.api.clearFieldError('endDate');
                }
            },
        },
    },
    {
        type: 'calendar',
        title: 'End Date',
        field: 'endDate',
        value: '',
        props: {
            type: 'single',
            placeholder: 'Please select end date',
        },
        inject: true,
        on: {
            confirm: ($inject, value) => {
                // Ensure end date is not earlier than start date
                const startDate = $inject.api.getValue('startDate');
                if (startDate && new Date(value) <= new Date(startDate)) {
                    $inject.api.setFieldError('endDate', 'End date must be later than start date');
                } else {
                    $inject.api.clearFieldError('endDate');
                }
            },
        },
    },
]

Complete configuration items:Vant_Calendar

value :String|String[]

Props

ParameterDescriptionTypeDefault Value
typeSelection type: single means select single date, multiple means select multiple dates, range means select date rangestringsingle
switch-mode v4.9.0Switch mode: none displays all months flat, no switch buttons, month supports month switching, shows previous/next month buttons, year-month supports year switching, also supports month switching, shows previous/next year, previous/next month buttonsstringnone
titleCalendar titlestringDate Selection
colorTheme color, applies to bottom button and selected datestring#1989fa
disabledWhether to disable inputbooleanfalse
min-dateMinimum selectable dateDateCurrent date when switch-mode is none
max-dateMaximum selectable dateDateSix months after current date when switch-mode is none
default-dateDefault selected date, array when type is multiple or range, pass null to default to no selectionDate | Date[] | nullToday
row-heightDate row heightnumber | string64
formatterDate formatting function(day: Day) => Day-
poppableWhether to display calendar as popupbooleantrue
lazy-renderWhether to only render visible area contentbooleantrue
show-markWhether to show month background watermarkbooleantrue
show-titleWhether to show calendar titlebooleantrue
show-subtitleWhether to show calendar subtitle (year/month)booleantrue
show-confirmWhether to show confirm buttonbooleantrue
readonlyWhether it is in readonly state, cannot select dates in readonly statebooleanfalse
confirm-textConfirm button textstringConfirm
confirm-disabled-textText when confirm button is in disabled statestringConfirm
first-day-of-weekSet week start day0-60

Events

Event NameDescriptionCallback Parameters
selectTriggered when any date is clicked and selectedvalue: Date | Date[]
confirmTriggered when date selection is completed, if show-confirm is true, triggered after clicking confirm buttonvalue: Date | Date[]
openTriggered when popup is opened-
closeTriggered when popup is closed-
openedTriggered when popup is opened and animation ends-
closedTriggered when popup is closed and animation ends-
unselectTriggered when date is unselected when calendar component's type is multiplevalue: Date
month-showTriggered when a month enters the visible area{ date: Date, title: string }
over-rangeTriggered when range selection exceeds maximum selectable days-
click-subtitleTriggered when calendar subtitle is clickedevent: MouseEvent
click-disabled-date v4.7.0Triggered when disabled date is clickedvalue: Date | Date[]
panel-changeTriggered when calendar panel switches{ date: Date }

FormCreate is an open-source project released under the MIT License. Free for personal and commercial use.