Datepicker,第2个日期是从第1个日期开始的X天

时间:2014-11-08 02:43:30

标签: javascript jquery datepicker

我已经阅读了很多不同的答案,但我很好奇为什么我这样做的具体方式(我在网上找不到)并没有产生预期的结果。

用户选择deliverydate,之后,Pickdate datepicker的交货日期最长为14天:

$( "#deliverydate" ).datepicker({
  defaultDate: 1,
  onClose: function( selectedDate ) {
    $( "#pickupdate" ).datepicker( "option", "minDate", selectedDate, "defaultDate", selectedDate, "maxDate", (Date.parse(selectedDate) - Date.today())/1000/60/60/24 + 14 );
  }
});

我认为运行计算的方法是计算从今天起所选日期的天数,然后再加上14(因为maxDate可以采用一个参数,它是一个表示从今天开始的天数的整数)。

注意我有Date.js

2 个答案:

答案 0 :(得分:0)

您只能将datepicker("option", option, value)语法用于一个选项。由于您使用$('#pickupdate') datepicker的多个选项,因此您需要将它们指定为JSON,就像您对$(#deliverydate)所做的那样。像这样:

$('#pickupdate').datepicker({
    minDate: selectedDate,
    defaultDate: selectedDate,
    maxDate: ((Date.parse(selectedDate) - Date.today())/1000/60/60/24 + 14 )
});

请参阅this JSFiddle进行工作演示。

另见this Stack Overflow question关于使用带有多个选项的jQuery Datepicker。

最后,您应该考虑更改为Moment.jslast release of Date.js was 2007,因此很长一段时间内没有任何重大或次要版本。

答案 1 :(得分:0)

经过大量的挖掘后确定......呃jQuery Datepicker不是很好的文档。

两个重要的事实:  1. Datepicker只能在ONCE初始化,此后为了更改设置,您必须使用option  2.根据Datepicker,您应该能够在选项 - 值对的映射中提供多个选项,但我没有做任何事情使它工作,并且他们的文档看起来就像单个选项,所以...无论如何,我只是设置3单独选择。

我开始工作的方式如下:

$( "#deliverydate" ).datepicker({
  defaultDate: 1, // 1 day from today
  numberOfMonths: 1,
  minDate: 0,
  maxDate: <%= ENV["Days_in_advance"].to_i %>,
  dateFormat: "M d, yy", 

  // despite the docs, it doesnt' look like you can set multiple options at once, so I'm doing it individually 3X below. 
  onClose: function( selectedDate ) {
    deliverydate = Date.parse(selectedDate);
    $( "#pickupdate" ).datepicker("option", 
      { defaultDate: ((deliverydate - Date.today())/1000/60/60/24 + 1 ) });
    // day after deliverydate 
    $( "#pickupdate" ).datepicker("option", 
      { minDate: ((deliverydate - Date.today())/1000/60/60/24 ) });
    // same day as deliverydate
    $( "#pickupdate" ).datepicker("option", 
      { maxDate: ((deliverydate - Date.today())/1000/60/60/24 + <%= ENV["Max_days_of_rental"].to_i %> )});
    // upper limit on rental days
  }
});
$( "#pickupdate" ).datepicker({
  // this is triggered on DOM load and is overwritten the minute a deliverydate is selected per the onClose 
  defaultDate: 1, // 1 day from today
  numberOfMonths: 1,
  minDate: 0,
  maxDate: <%= ENV["Max_days_of_rental"].to_i %>,
  dateFormat: "M d, yy"
});