Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript在用户输入开始/结束日期时显示到期日期_Javascript_Date - Fatal编程技术网

JavaScript在用户输入开始/结束日期时显示到期日期

JavaScript在用户输入开始/结束日期时显示到期日期,javascript,date,Javascript,Date,以前从未用JavaScript编程过,所以我请求您在用户从日历中选择开始日期和结束日期时显示到期日期。从日历中选择结束日期后,到期日期应显示在结束日期的两个月之后。例如: 用户选择2012年10月9日为开始日期;截止日期为2012年10月16日;2012年12月16日为有效期。如何在JavaScript中实现这一点 请检查此代码,因为我不知道如何编辑此代码 /** * Click "Cal" on expiry date */ function getExpiryDate() { if(!d

以前从未用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'));
}
}

我想你需要看看datejs

扩展Javascript日期功能的库

允许您执行以下操作:-

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

这几乎涵盖了您的需求。

因为您希望在当前日期的基础上再增加2个月

var d = new Date(year, month, day);
d.setMonth(d.getMonth() + 2);

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();
注意

  • 日期
    对象输入值的格式很重要,您需要首先验证该格式
  • 当我们创建到期日时,该值不会在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
函数的方法,我没有关于此函数如何工作的详细信息,因此无法最好地建议如何执行此操作

EDIT该函数是DHTMLGoodies JS Calendar 2006的一部分,它正在调用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;
}

我想在我的结束日期再加两个月。。我该怎么做?您必须使用数组将月份名称转换为它的编号,并在上面的代码中使用它。您好,如果不以编程方式包括var endDate=“2012/10/09”,我该怎么做;?因为结束日期是用户从日历中输入的。在您的代码中有
document.getElementById('enddate').value
,我想您可以插入它来替换硬编码的值,即
var enddate=document.getElementById('enddate').value尝试了您的代码,但它没有显示任何内容。如果您有时间,请检查我的全部代码:好的,是的,您需要将
var expireydate
更改为
preveexpireydate
就像在您的代码中一样,我已经更新了答案,这里还有一个没有日历的演示您好谢谢您的耐心,我真的需要您的帮助,以便我可以解决这个问题,我试图更改您为我提供的代码,但当我选择结束日期时,到期日期不会自动显示,我需要从日历中输入:(从日历中获取输入如何?