【问题标题】:set selected start time as min time for end date in react date picker在反应日期选择器中将选定的开始时间设置为结束日期的最小时间
【发布时间】:2019-09-13 09:15:45
【问题描述】:

您好,我在特定时间范围内使用 React Datepicker。

https://reactdatepicker.com/#example-specific-time-range.

这是我的代码:

class Location extends Component {
constructor() {
    super();
    this.state = {
       selectedStartDate: '',
       selectedEndDate: '',
        booking: {
            startDate: '',
            endDate: '',
        },
    };

    this.handleStartDateChange = this.handleStartDateChange.bind(this);
    this.handleEndDateChange = this.handleEndDateChange.bind(this);
}


handleStartDateChange(date) {
    var bookingObj = this.state.booking;
    bookingObj.startDate = date;
    this.setState({ booking: bookingObj})
}

handleEndDateChange(date) {
    var bookingObj = this.state.booking;
    bookingObj.endDate = date;
    this.setState({ booking: bookingObj})
}

render() {
    return (
        <div className="row">
            <div className="col-md-12 col-lg-12 start_boxx">
                <div className="row">
                    <div className="col-sm-12">
                        <div className="form-group date_time">
                            <DatePicker
                                className="form-control dtepickr"
                                placeholderText="Click to select start Date"
                                selected={this.state.booking.startDate}
                                onChange={this.handleStartDateChange}
                                minDate={this.state.selectedStartDate}
                                maxDate={this.state.selectedEndDate}
                                showTimeSelect
                                dateFormat="dd-MM-yyyy HH:mm aa"  
                            />
                        </div>
                        <div className="form-group date_time">
                            <DatePicker
                                className="form-control dtepickr"
                                placeholderText="Click to select end Date"
                                selected={this.state.booking.endDate}
                                onChange={this.handleEndDateChange}
                                minDate={this.state.selectedStartDate}
                                maxDate={this.state.selectedEndDate}
                                showTimeSelect
                                minTime={this.state.booking.startDate}
                                maxTime={this.state.booking.??}
                                dateFormat="dd-MM-yyyy HH:mm aa"
                            />
                        </div>
                    </div>
                </div>
            </div>
        </div>
    )
}
}

我想将我的开始时间设置为结束日期的最短时间。 我使用 minTime 和 maxTime 功能但不起作用。 请帮助我摆脱困境。 谢谢

【问题讨论】:

  • 您错过了将 selectedStartDate 和 selectedEndDate 添加为您的状态的一部分。添加这些并确认它是否正常工作
  • 现在已设置最小和最大日期,但尚未设置时间

标签: reactjs


【解决方案1】:

我正在尝试找到没有任何库的本机解决方案,我做到了。 希望对你有用。

我的要求是

  1. Min Date 是当前日期
  2. Min Time 是今天的当前时间
  3. 所有人的最大时间为晚上 11:59
  4. 当您选择下一个日期时,您可以选择任何时间
// initialValue of pickupDate is null
<DatePicker
  selected={values.pickupDate}
  onChange={date => handleChange('pickupDate', date)}
  showTimeSelect
  dateFormat="dd-MM-yyyy h:mm aa"
  placeholderText="Pick up date & time"
  isClearable
  minDate={new Date()}
  minTime={
    new Date().getDate() ===
    new Date(values.pickupDate ?? new Date().getTime()).getDate()
      ? new Date()
      : new Date().setHours(0, 0, 0)
  }
  maxTime={new Date().setHours(23, 59, 59)}
/>
new Date().getDate() === new Date(values.pickupDate ?? new Date().getTime()).getDate()

上面我用我的状态日期检查当前日期,我的 pickupDate 状态最初是 null 这就是为什么我最初给出 integer 时间戳的原因

? new Date() : new Date().setHours(0, 0, 0)

如果为真,则将当前时间设为minDate,否则将设置小时、分钟和秒为0

【讨论】:

    【解决方案2】:

    您将minDate/maxDate 设置为state.selectedStartDate/state.selectedEndDate,但您的组件中没有此类状态,它们是未定义的。

    另外,您不要在构造函数中调用super(props)

    class Location extends Component {
      //            v Call props
      constructor(props) {
        super(props);
        this.state = {
          booking: {
            startDate: '',
            endDate: ''
          },
          selectedStartDate: /* Some value */,
          selectedEndDate: /* Some  value */
        };
      }
    }
    

    【讨论】:

    • 已添加但未设置时间范围
    • 你是如何添加的,哪些值?更新你的问题,也许添加一些沙盒
    • 我使用最小时间作为选定日期,但我不想设置最大时间,如果我删除 maxTime 它会给出错误“需要 minTime 和 maxTime 道具”
    【解决方案3】:
    <DatePicker
    className="form-control dtepickr"
    placeholderText="Click to select end Date"
    selected={this.state.booking.endDate}
    onChange={this.handleEndDateChange}
    minDate={this.state.selectedStartDate}
    maxDate={this.state.selectedEndDate}
    showTimeSelect
    minTime={this.state.booking.startDate}
    maxTime={this.state.booking.??}
    dateFormat="dd-MM-yyyy HH:mm aa"
    disabled={this.state.isEndDateDisable}
    

    />

    【讨论】:

    • 你有编辑按钮,不要使用答案作为评论部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多