DatePicker 日期选择

示例

单日选择

默认情况下,在下拉浮层中单击日期可以选中一个日期。可以配置 clearable 属性来允许清除已选值,用 placeholder 属性来配置未选择时的占位文本。

Clearable

Customizable placeholder

支持 v-model,数据类型为原生 Date 类型。

<template>
<article>
  <section>
    <h4>Clearable</h4>
    <veui-date-picker
      v-model="date"
      clearable
    />
  </section>
  <section>
    <h4>Customizable placeholder</h4>
    <veui-date-picker
      v-model="date2"
      placeholder="Pick a day"
    />
  </section>
</article>
</template>

<script>
import { DatePicker } from 'veui'

export default {
  components: {
    'veui-date-picker': DatePicker
  },
  data () {
    return {
      date: new Date(),
      date2: null
    }
  }
}
</script>

日期范围选择

配置 range 属性时,可以在下拉浮层中选择一个日期范围。

Clearable

Customizable placeholder

支持 v-model,选择日期范围时数据类型为 [Date, Date]

<template>
<article>
  <section>
    <h4>Clearable</h4>
    <veui-date-picker
      v-model="range"
      range
      clearable
    />
  </section>
  <section>
    <h4>Customizable placeholder</h4>
    <veui-date-picker
      v-model="range"
      class="custom"
      range
      placeholder="Pick a date range..."
    />
  </section>
</article>
</template>

<script>
import { DatePicker } from 'veui'

export default {
  components: {
    'veui-date-picker': DatePicker
  },
  data () {
    return {
      range: null
    }
  }
}
</script>

设置快捷选项

选择日期范围时,可以通过配置 shortcuts 属性来提供快捷选项。

<template>
<article>
  <veui-date-picker
    v-model="range"
    :shortcuts="shortcuts"
    range
    clearable
  />
</article>
</template>

<script>
import { DatePicker } from 'veui'

export default {
  components: {
    'veui-date-picker': DatePicker
  },
  data () {
    return {
      range: null,
      shortcuts: [
        {
          label: '上个月',
          from: {
            startOf: 'month',
            month: -1
          },
          to: {
            startOf: 'month',
            days: -1
          }
        },
        {
          label: '本月',
          from: {
            startOf: 'month'
          },
          to: 0
        },
        {
          label: '本周',
          from: {
            startOf: 'week',
            days: 0
          },
          to: 0
        },
        {
          label: '最近7天',
          from: -6,
          to: 0
        },
        {
          label: '今天',
          to: 0
        }
      ]
    }
  }
}
</script>

API

属性

名称类型默认值描述
typestring'date'日历的类型,可用值为 'date'/'month'/'year',分别对应日期/月/年视图。值非 'date' 时,range 属性无效。
rangebooleanfalse是否选择日期范围。
selectedDate|Array-

v-model

已选日期(范围)的值,根据 range 属性值的不同,数据格式不同。

range类型
falseDate
true[Date, Date]
panelnumberrange ? 2 : 1日历面板数量。
todayDatenew Date()「今天」的日期。
week-startnumbercalendar.weekStart一周的起始。可进行全局配置
fill-monthbooleantrue当只有一个面板时,是否要在当前月份面板显示非本月日期。
date-classstring|Array|Object|function{}特定日期的自定义 HTML class。传非函数时,数据格式为所有 Vue 支持的 class 表达式;传函数时,签名为 function(Date): string|Array<string>|Object<string, boolean>,返回值格式亦为所有 Vue 支持的 class 表达式。
disabled-datefunction(Date): boolean() => false特定日期是否禁用。
clearablebooleanfalse已选值是否可以清除。
placeholderstringrange ? datepicker.rangePlaceholder : datepicker.placeholder未选择时的占位文本。可进行全局配置
formatstring'YYYY-MM-DD'用于格式化的字符串表达式,具体格式可以参见 date-fns 的文档
shortcutsArray<Object>datepicker.shortcuts

在选择范围时,可以定制的浮层中的快捷选择项列表,格式为 Array<{label, from, to}>。可进行全局配置

名称类型描述
labelstring快捷选项的文本。
from开始时间计算方式,见下方快捷选项偏移量数据格式描述。
to结束时间计算方式,见下方快捷选项偏移量数据格式描述。
shortcuts-positionstringdatepicker.shortcutsPosition快捷选项显示的位置,支持 'before''after'。分别表示显示在日历面板的上方和下方。可进行全局配置
disabledbooleanfalse是否为禁用状态。
readonlybooleanfalse是否为只读状态。

快捷选项偏移量数据格式

shortcuts 列表项中的 fromto 字段格式相同,分别用来设置开始结束日期的计算方式。格式为 number|Object,默认值为 0

  • 类型为 number 时,表示以「今天」为基准,偏移指定天数,比如 -1 等价于 { startOf: 'day', days: -1 },即「昨天」;

  • 类型为 Object 时,支持的格式为:{startOf: string=, days: number=, weeks: number=, months: number=, }

    名称类型默认值描述
    startOfstring='day'起始日期基准,支持的值有 'day'/'week'/'month'/'quarter'/'year'
    daynumber=-偏移的天数。
    weeknumber=-偏移的周数。
    monthnumber=-偏移的月数。
    quarternumber=-偏移的季度数。
    yearnumber=-偏移的年数。

计算方式是先根据 startOf 设置基准,然后根据其它字段进行偏移量的叠加。

可以根据下面的例子,结合 label 理解计算方式。掌握以后,就可以非常快速地对快捷选项进行设置了。

[
  {
    label: '上个月',
    // 本月第一天往前算一个月,即上月第一天
    from: {
      startOf: 'month',
      month: -1
    },
    // 本月第一天往前算一天,即上月最后一天
    to: {
      startOf: 'month',
      days: -1
    }
  },
  {
    label: '本月',
    // 本月第一天
    from: {
      startOf: 'month'
    },
    // 今天
    to: 0
  },
  {
    label: '本周',
    // 本周第一天,days 为 0 是可以省略的
    from: {
      startOf: 'week',
      days: 0
    },
    // 今天
    to: 0
  },
  {
    label: '最近7天',
    // 往前算 6 天
    from: -6,
    // 到今天
    to: 0
  },
  {
    label: '今天',
    to: 0
  }
]

插槽

名称描述
placeholder用来定制占位内容区域。
date

浮层中日历的单日单元格内的区域,可用来定制每一天对应区域的内容。

默认内容:对应日期的 date

名称类型描述
yearnumber完整年份。
monthnumber月份数,0 表示一月。
datenumber月份内的日期。
selected

已选择日期对应的展示区域。

默认内容:通过 format 属性指定方式格式化后的日期字符串。

名称类型描述
yearnumber完整年份。
monthnumber月份数,0 表示一月。
datenumber月份内的日期。
formattedstring格式化后的日期字符串。
positionstring=选择日期范围时,表示是范围的开始还是结束,分别对应值 fromto

事件

名称描述
select

v-model

选择修改后触发,回调参数为 (selected)。数据类型和 selected 属性一致。

全局配置

配置项类型默认值描述
datepicker.shortcutsArray[]快捷选项配置。
datepicker.shortcutsPositionstring'before'设置快捷选项显示在日历面板的上方还是下方,分别对应 'before''after'
datepicker.placeholderstring@@datepicker.selectDate选择单日时,未选择状态的占位文本。
datepicker.monthPlaceholderstring@@datepicker.selectMonth选择月份时,未选择状态的占位文本。
datepicker.yearPlaceholderstring@@datepicker.selectYear选择年时,未选择状态的占位文本。
datepicker.rangePlaceholderstring@@datepicker.selectRange选择日期范围时,未选择状态的占位文本。

@@ 开头的值表示引用多语言配置中的相应字段。

图标

名称描述
calendar日历。
clear清除内容。