Skip to content

日历

@astryxdesign/core v0.7.1 · Calendar

2026年4月
周日
周一
周二
周三
周四
周五
周六

使用方法 ​

Calendar 用月历网格选日期。可以选一天,也可以选一段起止日期,并排显示一个月或两个月。打开时先落到指定的月份;没有指定时,落在已选日期或今天,并尽量落进最早和最晚日期之间。

最早日期、最晚日期、返回真值的判断,以及一组返回假值的约束,都会让对应的日子不能选。范围还可以限制最短和最长天数,天数把两端都算进去。周数可以显示在每一行左侧。相邻月份的日期可以留在格子里,但不能选。行数可以按当月缩短,也可以固定六行。一周从哪一天开始,用数字或星期缩写指定。外面也可以拿到一个句柄,直接把月份翻到某一天并聚焦它。

方向键按天或按周移动,到头会翻月,并跳过不能选的日子。Home 和 End 移到这一周里能选的第一天和最后一天。PageUp 和 PageDown 翻一个月。Enter 或空格确认。范围还没选完时,Escape 取消。每个月是一块带月份名字的网格,今天、选中和禁用都能被读屏读到。

基本用法只需要绑定一个日期值:

vue
<script setup lang="ts">
import { Calendar } from '@astryx-vue/core/Calendar'
import { ref } from 'vue'

const date = ref<Date | null>(new Date(2026, 9, 11))
</script>

<template>
  <Calendar v-model="date" label="选择日期" />
</template>

绑定值是原生 Date。通过 min 和 max 限制可选日期范围,通过 isDateDisabled 函数禁用特定日期。月份标题和星期名称跟随当前语言。组件自带文案默认是英文,调用 provideAstryxLocale('zh-CN') 后改为中文。

解剖

部分说明
日历根装着月份标题和日期网格的容器。
月份标题月份、年份,以及切换月份的箭头。dir="rtl" 时箭头会自动对调。
日期网格七列的日期格,列头是星期名。
日期按钮网格里的一天,用来选日期。
选中的日期当前选中的日期,会高亮。范围模式下,还包括起止日期和中间那些天。
今天标记标在当天上的淡提示,用来帮人定位。

最佳实践 ​

指引实践
推荐为业务场景设置合理的日期范围限制。
推荐使用 isDateDisabled 禁用范围内仍不可选的日期。
推荐用固定的本地日期构造 Date,避免把带时区的时间戳直接当成日历上的某一天。
避免在日历上层叠过多的装饰或自定义内容,保持日期网格清晰。

示例 ​

日期限制

Jan 10 – Mar 20, weekdays only
2026年1月
周日
周一
周二
周三
周四
周五
周六

只能选择 2026 年 1 月 10 日到 3 月 20 日之间的工作日。

日期范围

2026-01-10 → 2026-01-20
2026年1月
周日
周一
周二
周三
周四
周五
周六

选择开始和结束日期,中间的日子会高亮。

单日

Selected: 2026-01-15
2026年1月
周日
周一
周二
周三
周四
周五
周六

在月历里选择一天。

两个月

2026-01-25 → 2026-02-05
2026年1月 – 2026年2月
周日
周一
周二
周三
周四
周五
周六
周日
周一
周二
周三
周四
周五
周六

并排显示两个月,用来选择跨月的日期范围。

周数和周起始

February 2026. Adjacent days stay visible but cannot be selected.
2026年2月
周
周一
周二
周三
周四
周五
周六
周日
5
6
7
8
9

可以打开周数、月外日期、按月缩短行数,并把一周的第一天改成周一。

跨度与翻月

At most three days, Sundays excluded. Escape cancels a range that is still open.
2026年1月
周日
周一
周二
周三
周四
周五
周六

这段范围最长三天,周日不可选。六月按钮会把月份翻过去。