【问题标题】:Calculate departure day based on arrival date and duration of program根据到达日期和程序持续时间计算出发日期
【发布时间】:2019-12-24 09:03:56
【问题描述】:

E&P Plugin for WordPress的cmets中的学习示例

我自己发现了一些错误,但仍然无法使代码工作。

案例:从选择字段 (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());

}

从第一个视图我发现他使用subtract而不是add

我使用https://momentjs.com/docs/Format date and Subtract days using Moment.js

var startdate = moment();
startdate = startdate.subtract(1, "days");

相等

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());
}

仍然没有重新计算出发日期on.click 并没有正确计算天数

【问题讨论】:

  • attr('data-price') 正确吗?仅从属性的命名来看,它似乎与日期无关。要检查每个值是否符合您的预期,您可以console.log 变量并在浏览器控制台中检查它们。
  • 这是一个文件名,存储天数如 7|14|30 等。

标签: javascript jquery momentjs


【解决方案1】:

我认为你得到了一个错误的结束日期,因为你正在执行moment().add(...),它在脚本执行时获取当前日期(Date.now() 等相关)。

尝试使用 startDate 变量并使用 moment 原型添加它:

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());
}

【讨论】:

  • 你说得对,现在可以正确计算日期,但仍然不会重新计算 on.change。仅当我逐步更改这两个参数几次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2017-05-26
  • 2014-02-18
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
相关资源
最近更新 更多