DatePicker 日期选择

引入

通过以下方式来全局注册组件,更多注册方式请参考组件注册

基础用法

通过 绑定当前选中的日期,通过 min-datemax-date 属性来设定可选的时间范围。

  1. <van-date-picker
  2. v-model="currentDate"
  3. title="选择日期"
  4. :min-date="minDate"
  5. :max-date="maxDate"
  6. />
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const currentDate = ref(['2021', '01', '01']);
  5. return {
  6. minDate: new Date(2020, 0, 1),
  7. currentDate,
  8. };
  9. },
  10. };

选项类型

通过 columns-type 属性可以控制选项的类型,支持以任意顺序对 yearmonthday 进行排列组合。

  • 传入 ['year'] 来单独选择年份。
  • 传入 ['month'] 来单独选择月份。
  • 传入 ['year', 'month'] 来选择年份和月份。
  • 传入 ['month', 'day'] 来选择月份和日期。
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const currentDate = ref(['2021', '01']);
  5. const columnsType = ['year', 'month'];
  6. return {
  7. maxDate: new Date(2025, 5, 1),
  8. currentDate,
  9. columnsType,
  10. };
  11. },
  12. };

通过传入 formatter 函数,可以对选项文字进行格式化处理。

  1. <van-date-picker
  2. v-model="currentDate"
  3. title="选择年月"
  4. :min-date="minDate"
  5. :max-date="maxDate"
  6. :formatter="formatter"
  7. :columns-type="columnsType"

过滤选项

通过传入 filter 函数,可以对选项数组进行过滤,实现自定义选项间隔。

  1. <van-date-picker
  2. v-model="currentDate"
  3. title="选择年月"
  4. :filter="filter"
  5. :min-date="minDate"
  6. :max-date="maxDate"
  7. :columns-type="columnsType"
  8. />
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const currentDate = ref(['2021', '01']);
  5. const columnsType = ['year', 'month'];
  6. const filter = (type, options) => {
  7. if (type === 'month') {
  8. return options.filter((option) => Number(option.value) % 6 === 0);
  9. }
  10. return options;
  11. return {
  12. filter,
  13. minDate: new Date(2020, 0, 1),
  14. maxDate: new Date(2025, 5, 1),
  15. currentTime,
  16. columnsType,
  17. };
  18. },

Props

Events

类型定义

组件导出以下类型定义:

设置 min-date 或 max-date 后出现页面卡死的情况?

正确的做法是将 min-date 作为一个数据定义在 data 函数或 setup 中。

在 iOS 系统上初始化组件失败?

如果你遇到了在 iOS 上无法渲染组件的问题,请确认在创建 Date 对象时没有使用 new Date('2020-01-01') 这样的写法,iOS 不支持以中划线分隔的日期格式,正确写法是 。

对此问题的详细解释:stackoverflow