antd组件限定时间选择器日期范围

21 篇文章 0 订阅
8 篇文章 1 订阅

react的antd组件时间选择器限定日期范围为指定范围

react项目中碰到一个需求,要求antd的日期选择器组件可选择范围为:只能选择开始时间的后60天

   即开始时间在结束日期前60天,结束日期在开始日期后60天,以下是截图和核心代码:主要利用日期组件的disabledDate属性

开始日期相同逻辑:不能早于结束日期前60天,不能晚于结束日期;不再截图

下面是react代码:

import moment from 'moment';
import {
  Form,
  Row,
  Col,
  DatePicker,
} from 'antd';
class DataTest extends Component {
  constructor(props) {
     super(props);
     this.state = {
        startTime: '', // 开始时间
        endTime: '', // 结束时间
     }
  }
  // 开始时间选择器(监控记录日期变换)
  handleStartDateChange = (value, dateString) => {
    this.setState({
      startTime: dateString,
    });
  };

  // 结束时间选择器(监控记录日期变换)
  handleEndDateChange = (value, dateString) => {
    this.setState({
      endTime: dateString,
    });
  };

  // 结束时间可选范围
  handleEndDisabledDate = (current) => {
    const { startTime } = this.state;
    if (startTime !== '') {
      // 核心逻辑: 结束日期不能多余开始日期后60天,且不能早于开始日期
      return current > moment(startTime).add(60, 'day') || current < moment(startTime);
    } else {
      return null;
    }
  }

  // 开始时间可选范围
  handleStartDisabledDate = (current) => {
    const { endTime } = this.state;
    if (endTime !== '') {
      // 核心逻辑: 开始日期不能晚于结束日期,且不能早于结束日期前60天
      return current < moment(endTime).subtract(60, 'day') || current > moment(endTime);
    } else {
      return null;
    }
  }

  render() {
    return (
      <Form layout="inline">
         <Row>
            <Col span={11}>
               <Form.Item label="时段">
                  <Form.Item style={{ marginTop: '3px' }}>
                    {getFieldDecorator('startTime')(
                      <DatePicker
                        onChange={this.handleStartDateChange.bind(this)}
                        disabledDate={this.handleStartDisabledDate.bind(this)}
                        placeholder="开始日期"
                      />)
                    }
                  </Form.Item>
                  <span style={{ display: 'inline-block', textAlign: 'center' }}>-</span>
                  <Form.Item style={{ marginTop: '3px' }}>
                    {getFieldDecorator('endTime')(
                      <DatePicker
                        onChange={this.handleEndDateChange.bind(this)}
                        disabledDate={this.handleEndDisabledDate.bind(this)}
                        placeholder="结束日期"
                      />)
                    }
                  </Form.Item>
                </Form.Item>
              </Col>
            </Row>
          </Form>
    )
  }
}
 
export default DataTest;

小伙伴们感觉有帮助的话希望点个赞哟,如果有问题或疑问欢迎大家评论区留言,看到后第一时间回复。

 

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值