0

以前从未在 JavaScript 中编程过,所以我请求您帮助在用户从日历中选择开始和结束日期时显示到期日期。从日历中选择结束日期后,到期日期应显示为结束日期增加了两个月。例如:用户选择 2012 年 10 月 9 日作为开始日期;2012年10月16日为结束日期;2012 年 12 月 16 日应为到期日。如何在 JavaScript 中实现这一点?

请检查此代码,因为我不知道如何编辑此代码。

/**
 * Click "Cal" on expiry date
 */
function getExpiryDate() {
if(!document.getElementById('enddate').value.length) {
    alert("End date must be set first.");
}
else {
    prevExpiryDate = document.getElementById('expirydate').value;
    displayCalendar(document.forms[0].expirydate,'yyyy/mm/dd',
        document.getElementById('expirydatebutton'));
}
}
4

3 回答 3

1

我认为您需要查看 datejs。

http://www.datejs.com/

扩展 Javascript 日期功能的库。

允许您执行以下操作:-

// Add 2 months to Today
Date.today().add(2).months();

这几乎涵盖了您的要求。

于 2012-10-09T10:59:39.020 回答
0

由于您想在当前日期上增加 2 个月,

var d = new Date(year, month, day);
d.setMonth(d.getMonth() + 2);
于 2012-10-09T11:07:29.253 回答
0

JavaScript 包含一个本机Date对象,您可以按如下方式向其添加月份...

var endDate = document.getElementById('enddate').value;
var date = new Date(endDate);
date.setMonth(date.getMonth() + 2); // Yes it will calculate going over a year etc
prevExpiryDate = date.getFullYear() + "/" + 
                 (date.getMonth() + 1) + "/" + // Months are 0 for January etc.
                 date.getDate();

笔记

  • 您向对象输入值的格式Date很重要,您需要先验证这一点。
  • 当我们创建到期日期时,该值不会在 2012/12/09 之前添加零,而是 2012/12/9

或者您可以按照建议使用库

编辑更新的代码,使其更容易添加到 OP 的代码中

替代方法,使用事件处理程序,我可以在您的代码中看到您正在使用 jQuery,如果您包含它,请充分利用它......

$("#enddate").change(function() {
  var endDate = $(this).val();

  // Calculate expiry date
  var date = new Date(endDate);
  date.setMonth(date.getMonth() + 2);

  // Get date parts
  var yyyy = date.getFullYear();
  var m = date.getMonth() + 1;
  var d = date.getDate();

  $("#expirydate").val(yyyy + "/" + m + "/" + d);
});

这需要在文档准备好后的某个时间运行,在您的代码行 441 中,它将设置 enddate 字段以在每次更改时更新到期日期字段。如果您以编程方式更改它,您可能需要手动调用更改处理程序

// Insert value programmatically
$("#enddate").val(newValue).change();

否则,您需要一种将初始值传递给displayCalendar函数的方法,我没有关于该函数如何工作的详细信息,因此我无法最好地建议如何做到这一点。

编辑该函数是 2006 年 DHTMLGoodies JS 日历的一部分,它调用 onchange 但与 jQuery 不兼容,所以你需要做的是使用元素的基本 onchange 属性来替换上面的 jQuery 代码。 .

document.getElementById("enddate").onchange = function() {
  var endDate = this.value;

  // Calculate expiry date
  var date = new Date(endDate);
  date.setMonth(date.getMonth() + 2);

  // Get date parts
  var yyyy = date.getFullYear();
  var m = date.getMonth() + 1;
  var d = date.getDate();

  document.getElementById("expirydate").value = yyyy + "/" + m + "/" + d;
}
于 2012-10-09T11:09:12.263 回答