Javascript 根据到达日期和节目持续时间计算出发日期

Javascript 根据到达日期和节目持续时间计算出发日期,javascript,jquery,momentjs,Javascript,Jquery,Momentjs,WordPress E&p插件评论中的学习示例 我自己也发现了一些bug,但仍然无法使代码正常工作 案例:从选择字段(5 | 7 | 14 | 30 | 60)中选择到达日期(日期选择器)和节目持续时间。生成出发日期 这个插件所有者的代码根本不需要任何单词 jQuery(document).ready(function(){ jQuery('[data-title="Departure"]').on('change',checkDates); jQuery('[data-title="P

WordPress E&p插件评论中的学习示例

我自己也发现了一些bug,但仍然无法使代码正常工作

案例:从选择字段(5 | 7 | 14 | 30 | 60)中选择到达日期(日期选择器)和节目持续时间。生成出发日期

这个插件所有者的代码根本不需要任何单词

jQuery(document).ready(function(){
  jQuery('[data-title="Departure"]').on('change',checkDates);
  jQuery('[data-title="Program"]').on('change',checkDates);
});

function checkDates(){
  var nbDays = jQuery('[data-title="Program"] option:selected').attr('data-price');
    var startDate = moment(jQuery('[data-title="Arrival"]').datetimepicker('getDate'));
    var endDate = startDate.subtract(nbDays,'days');
    jQuery('[data-title="Departure"]').datetimepicker('setDate',endDate.toDate());

}
从第一种观点来看,我发现他使用了
减法
而不是
加法

我使用和

平等

var startdate = moment().subtract(1, "days");
这是我的版本:

jQuery(document).ready(function(){
jQuery('[data-title="Arrival"]').on('change',checkDates);
jQuery('[data-title="Program"]').on('change',checkDates);
});

function checkDates(){
  var nbDays = jQuery('[data-title="Program"] option:selected').attr('data-price');
    var startDate = moment(jQuery('[data-title="Arrival"]').datetimepicker('getDate'));
    var endDate = moment().add(nbDays,'days');
    jQuery('[data-title="Departure"]').datetimepicker('setDate',endDate.toDate());
}

仍然没有重新计算出发日期。单击并正确计算天数

我认为您得到了错误的结束日期,因为您正在执行
时刻()。添加(…)
,它获取脚本执行时的当前日期(与
日期.now()相等)

尝试使用startDate变量,并使用moment prototype add:

var endDate=startDate.add(nbDays,'days')

这将使moment在startDate中添加额外的天数,而不是当前日期

最终结果:

function checkDates(){
    var nbDays = jQuery('[data-title="Program"] option:selected').attr('data-price');
    var startDate = moment(jQuery('[data-title="Arrival"]').datetimepicker('getDate'));
    var endDate = startDate.add(nbDays,'days');
    jQuery('[data-title="Departure"]').datetimepicker('setDate',endDate.toDate());
}

我认为您得到了错误的结束日期,因为您正在执行
moment()。添加(…)
,它获取脚本执行时的当前日期(与
date.now()

尝试使用startDate变量,并使用moment prototype add:

var endDate=startDate.add(nbDays,'days')

这将使moment在startDate中添加额外的天数,而不是当前日期

最终结果:

function checkDates(){
    var nbDays = jQuery('[data-title="Program"] option:selected').attr('data-price');
    var startDate = moment(jQuery('[data-title="Arrival"]').datetimepicker('getDate'));
    var endDate = startDate.add(nbDays,'days');
    jQuery('[data-title="Departure"]').datetimepicker('setDate',endDate.toDate());
}

attr('data-price')
正确吗?仅从属性的命名来看,它似乎与日期无关。要检查每个值是否都是您期望的值,您可以
console。记录变量并在浏览器控制台中检查它们。这是字段的名称,存储的天数如7 | 14 | 30等。
attr('data-price')
正确吗?仅从属性的命名来看,它似乎与日期无关。要检查每个值是否都是您期望的值,您可以
控制台。记录变量并在浏览器控制台中检查它们。这是一个文件名,存储了7 | 14 | 30等天数。您现在可以正确计算日期,但仍然不重新计算。更改。只有当我一步一步地修改这两个参数几次,你才可以正确地计算日期,但仍然不会在.change上重新计算。只要我一步一步地修改两个参数几次