import React, { Component } from 'react' import { DatePicker} from 'antd'; import moment from 'moment'; import 'moment/locale/zh-cn'; import locale from 'antd/lib/date-picker/locale/zh_CN'; const { RangePicker } = DatePicker; export default class App extends Component { state = { selectDate: null, } // 时间选择相关 /* 控制下单时间选择范围30天 */ disabledTaskDate = (current) => { if (this.state.selectDate) { const offsetV = 2592000000 //30天转换成ms const selectV = this.state.selectDate.valueOf() const currentV = current.valueOf() if (this.calcAdd(currentV, offsetV) > moment().valueOf()) { return this.calcMinus(currentV, offsetV) >= selectV || current > moment().endOf('day') ? true : false } else { return this.calcMinus(currentV, offsetV) >= selectV || this.calcAdd(currentV, offsetV) <= selectV ? true : false } } else { return current && current > moment().endOf('day') // 当天以后的时间不能选择 } } /* 选择任务时间变化 */ onDateChange = (dates) => { if (!dates || !dates.length) return this.setSelectDate(dates[0]) } onDateOpenChange = () => { this.setSelectDate(null) } setSelectDate = (args) => { this.setState({ selectDate: args, }) } /* 两个浮点数相减 */ calcMinus = (num1, num2) => { num1 = Number(num1); num2 = Number(num2); if (isNaN(num1) || isNaN(num2)) return 0; const num1Digits = (num1.toString().split(".")[1] || "").length; const num2Digits = (num2.toString().split(".")[1] || "").length; const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits)); return (this.calcMulti(num1, baseNum) - this.calcMulti(num2, baseNum)) / baseNum; }; calcAdd = (num1, num2) => { num1 = Number(num1); num2 = Number(num2); if (isNaN(num1) || isNaN(num2)) return 0; const num1Digits = (num1.toString().split(".")[1] || "").length; const num2Digits = (num2.toString().split(".")[1] || "").length; const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits)); return (this.calcMulti(num1, baseNum) + this.calcMulti(num2, baseNum)) / baseNum; } /* 两个浮点数相乘 */ calcMulti = (num1, num2) => { num1 = Number(num1); num2 = Number(num2); if (isNaN(num1) || isNaN(num2)) return 0; const num1String = num1.toString(); const num2String = num2.toString(); const num1Digits = (num1String.split(".")[1] || "").length; const num2Digits = (num2String.split(".")[1] || "").length; const baseNum = Math.pow(10, num1Digits + num2Digits); return ( (Number(num1String.replace(".", "")) * Number(num2String.replace(".", ""))) / baseNum ); }; render() { return ( <div> <RangePickerdisabledDate={this.disabledTaskDate} onCalendarChange={this.onDateChange} onOpenChange={this.onDateOpenChange} locale={locale} /> </div> ) } }