mootools日期选择器从其他日期选择器中设置值

mootools datepicker set value from other datepicker

本文关键字:日期 选择器 设置 mootools 其他      更新时间:2023-09-26

我有一个带有2个日期输入字段的mootools日期选择器(Arian/monkeyphysics)
我想在第一个字段的一天后设置第二个字段的日期。

到目前为止,我有:

window.addEvent("domready", function(e){
  new DatePicker('#arrival_date', { positionOffset: { x: -3, y: 5 }});
  new DatePicker('#departure_date', { positionOffset: { x: -3, y: 5 },onShow: function(){test();}
});
function test(){
  firstvalue = Date.parse($('arrival_date').value);
  newvalue = firstvalue.increment(); //ad 1 day to first input date
  console.log(newvalue); // Logs ok:Fri Jan 16 1970 22:24:11 ...
  $('arrival_date').set('value', newvalue );         //doesn't work
  $$('#departure_date').attach('#arrival_date');     //doesn't work
  $$('#departure_date').select(newvalue );           //doesn't work
}

怎么办(设置第一个字段后第二个字段的日期。)

该版本的DatePicker使用隐藏的输入。因此,您看到的不是您的输入值,而是unix日期戳。

如果您注意到Date.parse($('arrival_date').value);是在70年代,那是因为javascript使用毫秒,而unix时间是以秒为单位的。要从$('arrival_date').value中得到"真实"的一天,需要乘以1000。但你其实并不需要。

要使第二个DatePicker从第一个日期开始,您可以使用以下方法:

onSelect: function (){
    var depDate = $('departure_date');
    if (depDate.value == ""){
        depDate.value = $('arrival_date').value + 86400;
    }
}

这将为第一个日期选择器日期if增加一天,第二个日期为空。问题是,在打开日期选择器之前,你不会看到更改,所以如果你用程序更改值,用户将看不到。这意味着,如果没有if,万一用户再次更改第一个输入,您就会错过第二个日期,而用户没有注意到,从而导致沮丧/错误。