DateTimePicker设置默认的时间范围,超过范围则不可选

Posted 铁锤妹妹@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DateTimePicker设置默认的时间范围,超过范围则不可选相关的知识,希望对你有一定的参考价值。

一、需求

在项目中使用Element-ui中 DateTimePicker 日期时间选择器时,开始时间需要默认当天时间零点零时零秒(xxxx-xx-xx 00:00:00);结束时间需要默认当前时间几点几时几秒(比如现在是2022-07-06 15:04:31);用户进行选择器筛选时,选中开始时间,结束时间会控制在开始时间的6个月内,超过6个月的时间禁用,不可选。保证筛选范围一直控制在6个月。

二、注意的点

1)需要先把 日期时间选择器 面板解除联动 :unlink-panel=true
2)@calendar-change选中日历日期后会执行的回调,只有当 datetimerange 才生效,获取开始时间选中的值,在这基础上 startTime + (180 * 86400 * 1000),计算出180天之后的毫秒数
3) 禁用日期通过 :disabled-date 设置,传入函数;超过选中时间 + 180天,禁用选中

三、获取时间

获取当天零点:
new Date(new Date().toLocaleDateString());
获取当前时间:
new Date()

四、vue3+ts代码

父组件传值

import  getNowTime  from '@/utils/tool'

//默认时间范围是当天时间0点和当前具体时间
const timeRange = [getNowTime(new Date(new Date().toLocaleDateString())), getNowTime()]  

export const searchFormData = ref([
  
    label: '选择时间:',
    field: 'timeRange',
    value: timeRange,  //默认值
    itemType: 'dateTimeRange',
    start: 'start_time',
    end: 'end_time',
    maxDateRange: 180, // 用户限制可以选择的日期范围,半年180天
    unlinkPanels: true, // 解除左右面板联动
    col:  xs: 24, sm: 12, md: 12, lg: 12, xl: 12 
  
])

tool.ts
把通用方法最好封装成一个方法,放到一个文件里,方便多文件调用

export function getNowTime(time?:any) 
  const now = time || new Date()
  const year = now.getFullYear() // 获取完整的年份(4位,1970-????)
  const month = now.getMonth() + 1 // 获取当前月份(0-11,0代表1月)
  const today = now.getDate() // 获取当前日(1-31)
  const hour = now.getHours() // 获取当前小时数(0-23)
  const minute = now.getMinutes() // 获取当前分钟数(0-59)
  const second = now.getSeconds() // 获取当前秒数(0-59)
  let nowTime = ''
  nowTime = year + '-' + fillZero(month) + '-' + fillZero(today) + ' ' + fillZero(hour) + ':' +
    fillZero(minute) + ':' + fillZero(second)
  return nowTime


function fillZero(str:any) 
  let realNum
  if (str < 10) 
    realNum = '0' + str
   else 
    realNum = str
  
  return realNum

封装的子组件

<template v-if="item.itemType === 'dateTimeRange'">
    <el-config-provider :locale="locale">
       <el-date-picker
          v-model="formInline[item.field]"
          value-format="YYYY-MM-DD HH:mm:ss"
          type="datetimerange"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          :clearable="false"
          :disabled-date="disabledDate"
          :unlink-panels="item.unlinkPanels ? item.unlinkPanels : false"
           @calendar-change="((time1,time2) => 
              calendarChange(time1,time2,item.maxDateRange)
             )"
       />
   </el-config-provider>
</template>

<script lang="ts">
   const selectDate = ref<number>() // 用户选择的时间日期
   const dateRange = ref<number>()
   watch(
      () => props.data,
      (data) => 
        initForm(data) //监听,初始化默认值
      ,
      
        deep: true,
        immediate: true
      
    )  
    
  //初始化筛选时间默认值,值为父组件传来的value
 function initForm(data: any): void 
      for (const v of data) 
        formInline.value[v.field] = v.value  
      
    
    
  //选中日历日期后会执行的回调,获取选中时间,只有当 datetimerange 才生效
 function calendarChange(time1 :any, time2 :any, maxDateParam :number) 
      if (maxDateParam) 
        selectDate.value = time1[0].getTime()  //转换成时间戳 (毫秒)
        dateRange.value = maxDateParam
      
    
    //判断选中开始日期的180天之后,选中被禁用
    const disabledDate = (time: Date) => 
      if (selectDate.value && dateRange.value) 
        const startTime = selectDate.value
        const endTime = startTime + (dateRange.value * 86400 * 1000)
        return time.getTime() > endTime // true
       else 
        return false
      
    

</script>

可参考:
JavaScript 获取当前时间 —— 年月日时分秒
JS获取当天零点或23:59:59的时间
element ui DateTimePicker 日期时间选择器

以上是关于DateTimePicker设置默认的时间范围,超过范围则不可选的主要内容,如果未能解决你的问题,请参考以下文章

设置 DateTimePicker 以显示特定的时间范围,例如仅工作时间

vb datetimepicker 默认值设置为08:00:00

使用 PHP 日期时间值设置 datetimepicker 默认值

winform中的dateTimePicker控件怎么设置它的默认值为空?

如何设置datetimepicker的值

在htm中bootstrap+datetimepicker怎么样设置默认时间