【问题标题】:js-datepicker date range end based on startjs-datepicker 日期范围结束基于开始
【发布时间】:2019-01-17 04:02:40
【问题描述】:

我正在使用这个日期选择器https://www.npmjs.com/package/js-datepicker,并且大部分时间都在使用它。但是,我希望根据开始日期中选择的内容来确定第二个日期的开始日期和结束日期。

HTML:

    <input type="text" name="message[dateStart][]" class='date date-start' placeholder="Start Date">

    <input type="text" name="message[dateEnd][]" class='date date-end' placeholder="End Date">  

当前的javascript

// set date to 2 weeks from now calculated in milliseconds
var afterTwoWeeks = new Date(+new Date + 1209600000);

var pickerEnStart = datepicker('.date-start', {
  // dateSelected: new Date(2099, 0, 5)
  minDate: new Date(afterTwoWeeks),
  startDate: new Date(afterTwoWeeks),
  noWeekends: true,
  formatter: (input, date, instance) => {
    const value = date.toLocaleDateString()
    input.value = value // => '1/1/2099'
  }
})


var pickerEnEnd = datepicker('.date-end', {
  // dateSelected: new Date(2099, 0, 5)
  minDate: new Date(afterTwoWeeks),
  startDate: new Date(afterTwoWeeks),
  noWeekends: true,
  formatter: (input, date, instance) => {
    const value = date.toLocaleDateString()
    input.value = value // => '1/1/2099'
  }
})

我尝试了几件事,但无法根据所选的开始日期获得开始/结束的结束日期。

【问题讨论】:

    标签: javascript date datepicker


    【解决方案1】:

    这似乎按我预期的方式工作。

    HTML

       <input type="text" name="message[dateStart][]" class='date date-start' placeholder="Start Date">
    
       <input type="text" name="message[dateEnd][]" class='date date-end' placeholder="End Date">  
    
       <input type="button" id="reset" name="reset" value="Reset">
    

    JS

    var afterTwoWeeks = new Date(+new Date + 1209600000)
    
    // none of this works well if we can't clear dates
    var reset = document.getElementById('reset')
    reset.onclick = function() {
      pickerEnStart.setDate()
      pickerEnEnd.setDate()
    }
    
    var pickerEnStart = datepicker('.date-start', {
      minDate: new Date(afterTwoWeeks),
      startDate: new Date(afterTwoWeeks),
      noWeekends: true,
      formatter: (input, date, instance) => {
        const value = date.toLocaleDateString()
        input.value = value 
      },
      id: 1,
      onSelect: (instance, date) => {
        // set the minimum date
        instance.setMin(date)
        // if end date not selected...
        if(!pickerEnEnd.dateSelected) { 
          // set the end date to force the calendar to display that month
          pickerEnEnd.setDate(new Date(date.getTime() + 1000*60*60*24), true)
          pickerEnEnd.firstTime = true
        }
      }
    })
    
    var pickerEnEnd = datepicker('.date-end', {
      minDate: new Date(afterTwoWeeks),
      startDate: new Date(afterTwoWeeks),
      noWeekends: true,
      formatter: (input, date, instance) => {
        const value = date.toLocaleDateString()
        input.value = value
      }, 
      id: 1,
      onSelect: (instance, date) => {
        instance.setMax(date)
      },
      onShow: function(instance) {
        // if this is the first time we're seeing this calendar...
        if (instance.firstTime) {
          // get rid of the end date we set to force it to this month
          instance.setDate();
          instance.firstTime = false;
        }
      },
    })
    

    【讨论】:

    • 我发现了一个你可能想要探索的错误。设置几个月后的日期,然后重新设置。现在尝试设置日期,更改月份。您设置的第一个日期似乎反映在某处的“下个月”。可能只需要在重置时触摸一个额外的变量。
    • 现在我需要将第二个日期选择器上的 maxDate 设置为第一个选择器上的日期 + 两周。我尝试了很多东西,但都失败了。这可能吗?
    • 可能有很多方法可以做到,我的可能不是最好的。但是,在第二个日历 onShow 中,您可以设置一个比 instance.minDate 提前 2 周的 maxDate。 instance.setMax(new Date(instance.minDate.getTime() + 1000*60*60*24*14))
    • 太棒了。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多