Skip to content

DateRangePicker

年月日区间

html

<view>
  <pa-date-range-picker
    v-model:start="start"
    v-model:end="end"
  />
  <view class="demo-result">
    <view>开始时间:{{ formatDate(start) }}</view>
    <view>结束时间:{{ formatDate(end) }}</view>
  </view>
</view>
ts

import dayjs from 'dayjs'
import { ref } from 'vue'

const start = ref<Date | undefined>(undefined)
const end = ref<Date | undefined>(undefined)

const formatDate = (date?: Date) => {
  if (!date) return ''
  return dayjs(date).format('YYYY-MM-DD')
}

年月日时分区间

html

<view>
  <pa-date-range-picker
    v-model:start="start"
    v-model:end="end"
    :columns-type="['year', 'month', 'day', 'hour', 'minute']"
  />
  <view class="demo-result">
    <view>开始时间:{{ formatDateTime(start) }}</view>
    <view>结束时间:{{ formatDateTime(end) }}</view>
  </view>
</view>
ts

import dayjs from 'dayjs'
import { ref } from 'vue'

const start = ref<Date>(new Date())
const end = ref<Date>(dayjs().add(1, 'hour').toDate())

const formatDateTime = (date?: Date) => {
  if (!date) return ''
  return dayjs(date).format('YYYY-MM-DD HH:mm')
}

带 label 的年月日区间

html

<view>
  <pa-date-range-picker
    v-model:start="start"
    v-model:end="end"
    start-label="出发日期"
    end-label="返回日期"
  />
  <view class="demo-result">
    <view>出发日期:{{ formatDate(start) }}</view>
    <view>返回日期:{{ formatDate(end) }}</view>
  </view>
</view>
ts

import dayjs from 'dayjs'
import { ref } from 'vue'

const start = ref<Date>(new Date())
const end = ref<Date>(dayjs().add(3, 'day').toDate())

const formatDate = (date?: Date) => {
  if (!date) return ''
  return dayjs(date).format('YYYY-MM-DD')
}

禁用、只读与可清空

html

<view class="demo-state">
  <view class="demo-state__section">
    <view class="demo-state__title">可清空</view>
    <pa-date-range-picker
      v-model:start="clearableStart"
      v-model:end="clearableEnd"
      clearable
      @clear="onClear"
    />
    <view class="demo-result">
      <view>开始时间:{{ formatDate(clearableStart) }}</view>
      <view>结束时间:{{ formatDate(clearableEnd) }}</view>
      <view>清空次数:{{ clearCount }}</view>
    </view>
  </view>

  <view class="demo-state__section">
    <view class="demo-state__title">只读</view>
    <pa-date-range-picker
      v-model:start="readonlyStart"
      v-model:end="readonlyEnd"
      readonly
    />
    <view class="demo-result">
      <view>开始时间:{{ formatDate(readonlyStart) }}</view>
      <view>结束时间:{{ formatDate(readonlyEnd) }}</view>
    </view>
  </view>

  <view class="demo-state__section">
    <view class="demo-state__title">禁用</view>
    <pa-date-range-picker
      v-model:start="disabledStart"
      v-model:end="disabledEnd"
      disabled
    />
    <view class="demo-result">
      <view>开始时间:{{ formatDate(disabledStart) }}</view>
      <view>结束时间:{{ formatDate(disabledEnd) }}</view>
    </view>
  </view>
</view>
ts

import dayjs from 'dayjs'
import { ref } from 'vue'

const clearableStart = ref<Date>(new Date())
const clearableEnd = ref<Date>(dayjs().add(7, 'day').toDate())
const readonlyStart = ref<Date>(new Date())
const readonlyEnd = ref<Date>(dayjs().add(2, 'day').toDate())
const disabledStart = ref<Date>(new Date())
const disabledEnd = ref<Date>(dayjs().add(5, 'day').toDate())
const clearCount = ref(0)

/** 格式化日期展示 */
const formatDate = (date?: Date) => {
  if (!date) return ''
  return dayjs(date).format('YYYY-MM-DD')
}

/** 处理清空事件 */
const onClear = () => {
  clearCount.value += 1
}

DateRangePicker Props

参数说明类型默认值
start开始时间date-
end结束时间date-
columnsType选项类型DatePickerColumnType[]() => ['year', 'month', 'day']
minDate可选的最小时间,精确到分date-
maxDate可选的最大时间,精确到分date-
title顶部栏标题string'选择时间区间'
showToolbar是否显示顶部栏booleantrue
optionHeight选项高度number44
visibleOptionNum可见选项个数number6
formatter选项格式化函数DatePickerFormatter-
filter选项过滤函数DatePickerFilter-
allowReverse是否允许结束时间早于开始时间booleanfalse
disabled是否禁用boolean-
readonly是否只读boolean-
clearable是否显示清空控件boolean-
startLabel开始时间标签string-
endLabel结束时间标签string-
startPlaceholder开始时间占位文字string'开始时间'
endPlaceholder结束时间占位文字string'结束时间'
confirmButtonText确认按钮文字string'确认'
cancelButtonText取消按钮文字string'取消'

DateRangePicker Event

事件名参数
update:start(value?: Date)
update:end(value?: Date)
change(value: { start: Date; end: Date })
confirm(value: { start: Date; end: Date })
cancel()
clear()

DateRangePicker Slot

名称说明

样式变量

名称默认值
--pa-date-range-picker-background#fff
--pa-date-range-picker-border-colorvar(--pa-color-border)
--pa-date-range-picker-border-radius12rpx
--pa-date-range-picker-clear-colorvar(--pa-color-disabled)
--pa-date-range-picker-disabled-backgroundvar(--pa-color-background-disabled, #f7f8fa)
--pa-date-range-picker-disabled-colorvar(--pa-color-disabled)
--pa-date-range-picker-label-colorvar(--pa-color-black)
--pa-date-range-picker-padding-x20rpx
--pa-date-range-picker-padding-y16rpx
--pa-date-range-picker-placeholder-colorvar(--pa-color-disabled)
--pa-date-range-picker-readonly-background#fff
--pa-date-range-picker-readonly-colorvar(--pa-color-text-secondary)
--pa-date-range-picker-separator-colorvar(--pa-color-text-secondary)
--pa-date-range-picker-separator-margin12rpx
--pa-date-range-picker-value-colorvar(--pa-color-text)
--pa-date-range-picker-clear-font-size32rpx
--pa-date-range-picker-clear-padding-right20rpx
--pa-date-range-picker-disabled-border-colorvar(--pa-color-border)
--pa-date-range-picker-label-font-size24rpx
--pa-date-range-picker-label-margin-bottom8rpx
--pa-date-range-picker-value-font-size26rpx