Skip to content

Date Picker 日期选择

选择年、月、日或 ISO 周。granularity 约束 v-model、边界和 matcher 的类型;日模式使用分段输入,年、月、周通过弹层选择。

命令行安装

bash
npx @loongship-kit/ui add date-picker

四种粒度

20260812
年:2026月:2026-08日:2026-08-12周:2026-W33
查看代码
vue
<script setup lang="ts">
import { CalendarDate } from '@internationalized/date'
import { shallowRef } from 'vue'
import {
  DatePicker,
  type MonthValue,
  type WeekValue,
  type YearValue
} from '@/components/loongship/date-picker'

const year = shallowRef<YearValue>({ year: 2026 })
const month = shallowRef<MonthValue>({ year: 2026, month: 8 })
const day = shallowRef<CalendarDate>(new CalendarDate(2026, 8, 12))
const week = shallowRef<WeekValue>({ weekYear: 2026, week: 33 })
</script>

<template>
  <DatePicker v-model="year" granularity="year" aria-label="选择年份" />
  <DatePicker v-model="month" granularity="month" aria-label="选择月份" />
  <DatePicker v-model="day" granularity="day" aria-label="选择日期" />
  <DatePicker v-model="week" granularity="week" aria-label="选择周" />
</template>

值、约束和接口边界

粒度值类型表单序列化
year{ year: number }2026
month{ year: number; month: number }2026-08
dayCalendarDate2026-08-13
week{ weekYear: number; week: number }2026-W33

ISO 周规则

周固定采用 ISO 8601:周一至周日,第 1 周是包含 1 月 4 日的周。weekStartsOn 只影响日模式。

接口边界转换

minValuemaxValueisValueDisabledisValueUnavailable 使用当前粒度的值类型。需要传给日期接口时,使用导出的边界工具:

ts
const id = week.value ? serializeDatePickerValue('week', week.value) : undefined
const bounds = week.value ? getDatePickerValueBounds('week', week.value) : undefined
// bounds.start / bounds.end 均为 CalendarDate

API

属性类型默认值说明
granularity'year' | 'month' | 'day' | 'week''day'选择粒度并约束其他值类型
v-modelDatePickerValue<G> | null-当前值;清空发出 undefined
defaultValueDatePickerValue<G>-非受控初值
defaultPlaceholderDatePickerValue<G>当前单位初始面板位置
v-model:openboolean-受控弹层状态
defaultOpenbooleanfalse非受控初始弹层状态
minValueDatePickerValue<G>-最小包含式单位边界
maxValueDatePickerValue<G>-最大包含式单位边界
isValueDisabled(value: DatePickerValue<G>) => boolean-禁用单位
isValueUnavailable(value: DatePickerValue<G>) => boolean-标记不可用单位
localestring'zh-CN'显示语言
weekStartsOn0...61日模式的周首日
weekdayFormat'narrow' | 'short' | 'long''narrow'星期标题
fixedWeeksbooleantrue日历是否固定显示六周
numberOfMonths1 | 21日模式同时显示的月份数
yearsPerPagenumber10年面板每页数量
clearablebooleantrue是否显示清空按钮
closeOnSelectbooleantrue选择后是否关闭弹层
disabledbooleanfalse禁用状态
readonlybooleanfalse只读状态
requiredbooleanfalse必填状态
idstring-表单元素 ID
namestring-字段名;隐藏值使用标准序列化格式
panelLabelstring按粒度生成面板可访问名称
previousLabelstring按粒度生成上一页可访问名称
nextLabelstring按粒度生成下一页可访问名称
clearLabelstring按粒度生成清空按钮可访问名称
classClassValue-字段类名
contentClassClassValue-弹层类名

事件

事件参数说明
update:modelValueDatePickerValue<G> | undefined选择或清空时触发
update:openboolean弹层状态改变时触发
clear-点击清空按钮时触发

插槽

插槽参数说明
cell{ value, label, disabled, selected, today, unavailable, outsideView?, outsideVisibleView? }自定义单位内容