Skip to content

date-picker 日期选择器

日期选择器组件(Date picker component)是一种用于在用户界面上选择日期的特定UI组件。它允许用户从一个日历或类似界面中选择日期,并将所选日期作为输入值。

Props参数

名称类型是否必传默认值描述
visibleboolean-是否显示

示例

tsx
import { useEffect, useState } from 'react'
import { View } from '@tarojs/components'
import MMDatePicker from '~/components/date-picker'
import MMButton from '~/components/button'
import dayjs from 'dayjs'
import MMPageContainer from '../_components/page-container'
import PageDemoBlock from '../_components/page-demo-block'

export default () => {
  return (
    <MMPageContainer title="日期选择器">
      <CommonPicker />

      <TypePicker />

      <MinMaxPicker />
    </MMPageContainer>
  )
}

function CommonPicker() {
  const [visible, setVisible] = useState(false)
  const [value, setValue] = useState(dayjs().subtract(1, 'day').toDate())

  return (
    <PageDemoBlock title="基础使用">
      <MMButton onClick={() => setVisible(true)}>{dayjs(value).format('YYYY-MM-DD')}</MMButton>
      <MMDatePicker visible={visible} value={value} onChange={(va) => setValue(va)} onVisibleChange={setVisible} />
    </PageDemoBlock>
  )
}

function TypePicker() {
  const [value, setValue] = useState(dayjs().subtract(1, 'day').toDate())
  const [visible, setVisible] = useState(false)
  const [visible2, setVisible2] = useState(false)
  const [visible3, setVisible3] = useState(false)

  return (
    <View>
      <PageDemoBlock title="说明">组件支持 年、年月日、年月日时分类型</PageDemoBlock>
      <PageDemoBlock title="年">
        <MMButton onClick={() => setVisible(true)}>{dayjs(value).format('YYYY-MM-DD')}</MMButton>
        <MMDatePicker visible={visible} type="year" value={value} onChange={(va) => setValue(va)} onVisibleChange={setVisible} />
      </PageDemoBlock>

      <PageDemoBlock title="年月">
        <MMButton onClick={() => setVisible3(true)}>{dayjs(value).format('YYYY-MM')}</MMButton>
        <MMDatePicker visible={visible3} type="yearMonth" value={value} onChange={(va) => setValue(va)} onVisibleChange={setVisible3} />
      </PageDemoBlock>

      <PageDemoBlock title="年月日时分秒">
        <View>年月日时分类型 最好设置最大最小日期。 否则性能可能会有问题</View>
        <MMButton onClick={() => setVisible2(true)}>{dayjs(value).format('YYYY-MM-DD HH:mm:ss')}</MMButton>
        <MMDatePicker
          visible={visible2}
          type="dateHourMinute"
          value={value}
          maxDate={dayjs().add(1, 'year').toDate()}
          minDate={dayjs().subtract(5, 'year').toDate()}
          onChange={(va) => setValue(va)}
          onVisibleChange={setVisible2}
        />
      </PageDemoBlock>
    </View>
  )
}

function MinMaxPicker() {
  const [visible, setVisible] = useState(false)
  const [value, setValue] = useState(dayjs().toDate())

  return (
    <PageDemoBlock title="设置最大最小日期">
      <MMButton onClick={() => setVisible(true)}>{dayjs(value).format('YYYY-MM-DD')}</MMButton>

      <MMDatePicker
        visible={visible}
        value={value}
        onChange={(va) => setValue(va)}
        onVisibleChange={setVisible}
        maxDate={dayjs().add(1, 'year').toDate()}
        minDate={dayjs().subtract(5, 'year').toDate()}
      />
    </PageDemoBlock>
  )
}