React Hooks应用antd中 DatePicker组件设置时间小于当前时间

React Hooks应用antd中 DatePicker组件设置默认值

按照需求实现年月日时分截至至当前时间
页面效果呈现出来了,可是仍有bug
未点击选中当前日期的话,我们手动选择时分就会出现当前的时分与当下时间不匹配,本来想用组件内部的方法解决,让时分秒面板显示禁止图标,奈何没找到方法
出现的问题效果图如下:
这里如果我们不去选中当前日期,而是先选择小时分钟且大于当前时分的数字,就会出现可以选择未来时间,这并不是我想要的效果,而且我一选中才会显示禁止哪些时分,但赋值已经出错了,页面禁止也无用
在这里插入图片描述

针对这个问题自己做了优化
最后,干脆赋值一个默认时间,它就不会出现时分选择大于当前时分解决方法如下:

			//需引入moment.js
			import moment from "moment";
			const date=new Date()
			// 此处代码实现仅为部分展示


			<Form.Item
                className="number"
                validateTrigger="onBlur"
                name="faultDate"
                rules={[
                  {
                    required: true,
                    message: "请选择问题发生时间",
                  },
                ]}
                initialValue={moment(date,'YYYY-MM-DD HH:mm')}
              >
              // disabledTime 与 showTime 一起使用
                <DatePicker
                  disabledDate={disabledDate}
                  disabledTime={disabledTime}
                  className='datePicker'
                  format="YYYY-MM-DD HH:mm"
                  showTime
                  onChange={(value) => handleDateChange(value)}
                />
		</Form.Item>
		对应的事件
		// 禁止大于当前的日期
		const disabledDate = (current) => {
    		return current && moment().endOf('day') < current;
  		};
  		//循环数组
  		const range = (start, end) => {
    		const result = [];
    		for (let i = start; i < end; i++) {
      			result.push(i);
    		}
    		return result;
  		}
  		// 禁止大于当前时分
  		const disabledTime = (current) => {
    		const hours = moment().hours();
    		const minutes = moment().minutes();
    		const currentHour = moment(current).hour();
    		if (current && moment(current).date() === moment().date()) {
      			return {
        			disabledHours: () => range(0, 24).splice(hours+1, 24-hours),
        			disabledMinutes: () => {
          			if (currentHour === hours) {
            			return range(0, 60).splice(minutes+1, 60-minutes);
          			}else {
            			return [];
          			}
        		},
      		}
    	}else {
      		return {
        		disabledHours: () => [],
        		disabledMinutes: () => [],
      			}
    		}
  		}

效果图如下:
我们页面已经显示了当前的年月日时分,打开时间面板时间也默认当前时间,效果正如我想要实现的
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
antdDatePicker组件也可以通过类似的方式实现清空功能。antdDatePicker组件提供了一个allowClear属性,设置为true就可以显示清空按钮。在清空按钮的点击事件,可以将DatePicker组件的值设置为null或默认值。 示例代码: ``` import React, { useState } from 'react'; import { DatePicker } from 'antd'; function App() { const [date, setDate] = useState(null); const handleClear = () => { setDate(null); }; return ( <> <DatePicker value={date} onChange={value => setDate(value)} allowClear /> <button onClick={handleClear}>清空</button> </> ); } export default App; ``` 在这个示例,另一个需要注意的点是,antdDatePicker组件的值是一个Moment.js对象,而不是一个Date对象。因此,在onChange事件获取到的value是一个Moment.js对象。如果需要将其转换为Date对象,可以使用toDate方法,例如:value.toDate()。 另外,antdDatePicker组件还提供了一个ref属性,可以通过获取到这个ref来调用DatePicker组件的方法,包括clear方法。使用方式与React的示例类似。 示例代码: ``` import React, { useRef } from 'react'; import { DatePicker } from 'antd'; function App() { const datePickerRef = useRef(null); const handleClear = () => { datePickerRef.current.clear(); }; return ( <> <DatePicker ref={datePickerRef} allowClear /> <button onClick={handleClear}>清空</button> </> ); } export default App; ``` 以上是在React使用antdDatePicker组件实现清空功能的方法,可以根据实际需要选择适合自己的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值