当前位置: 首页 > 面试题库 >

在JavaScript中向日期添加月份

薄高懿
2023-03-14
问题内容

我想在用户输入的结束日期前加上2个月。如何在结束日期前加上2个月并显示呢?

/**
* Click "Cal" on end date
*/
function getEndDate() {
if(!document.getElementById('startdate').value.length) {
    alert("Start date must be set first.");
}
else {
    prevEndDate = document.getElementById('enddate').value;
    displayCalendar(document.forms[0].enddate,'yyyy/mm/dd',
        document.getElementById('enddatebutton'));
}
}

/**
* 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'));
 }
}

任何帮助表示赞赏。谢谢!


问题答案:

您需要获取增加数月的业务规则。简单的解决方案是:

function addMonths(dateObj, num) {
  return dateObj.setMonth(dateObj.getMonth() + num);
}

但是,这将从7月31日更改为9月31日,并将转换为10月1日。同样,1月31日加上1个月是2月31日,根据是否是leap年,它将转换为3月2日或3月3日。

您可能希望第一次是9月30日,第二次是2月28日或29日(取决于是否是leap年)。

因此,如果您希望遵守“月底”,则需要执行以下操作:

function addMonths(dateObj, num) {

    var currentMonth = dateObj.getMonth() + dateObj.getFullYear() * 12;
    dateObj.setMonth(dateObj.getMonth() + num);
    var diff = dateObj.getMonth() + dateObj.getFullYear() * 12 - currentMonth;

    // If don't get the right number, set date to 
    // last day of previous month
    if (diff != num) {
        dateObj.setDate(0);
    } 
    return dateObj;
}

但是,请与负责他们想要的业务规则的人核对。

编辑

上面的方法效果很好,但是为了回应McShaman的评论,这里提供了一个更简单的月度过渡检查版本:

function addMonths(date, months) {

  var d = date.getDate();

  date.setMonth(date.getMonth() + +months);

  if (date.getDate() != d) {

    date.setDate(0);

  }

  return date;

}



// Add 12 months to 29 Feb 2016 -> 28 Feb 2017

console.log(addMonths(new Date(2016,1,29),12).toString());



// Subtract 1 month from 1 Jan 2017 -> 1 Dec 2016

console.log(addMonths(new Date(2017,0,1),-1).toString());



// Subtract 2 months from 31 Jan 2017 -> 30 Nov 2016

console.log(addMonths(new Date(2017,0,31),-2).toString());



// Add 2 months to 31 Dec 2016 -> 28 Feb 2017

console.log(addMonths(new Date(2016,11,31),2).toString());


 类似资料:
  • 问题内容: 我想在JavaScript中添加几个月的日期。 例如:我要插入日期(格式),现在我要在此日期前加上8个月。我希望结果是。 因此,增加月份时,年份也可能增加。 问题答案: 已于2019年6月25日更正: 旧

  • 问题内容: 如何在where子句中检查的日期中增加一个月? 例如: 问题答案:

  • 我不确定这是否可能? 我得拿到密码才能读 今天的月份即2月今天的日期即17月底的日期即31日,然后是一年中的其他11个月,在一行中按顺序排列 8月1日-31日|9月|10月|11月|12月|1月|2月|3月|4月|5月|6月|7月 请以最佳方式提供任何建议? 多谢 定时(timing的缩写)

  • 问题内容: 我正在寻找将X个月添加到JavaScript日期的最简单,最干净的方法。 我宁愿不处理这一年的过渡,也不必编写自己的函数。 有内置的东西可以做到这一点吗? 问题答案: 以下函数在JavaScript中将日期添加月份源。它考虑了年度结转和不同的月份长度: 上面的解决方案涵盖了从比目标月份更长的天数中移动一个月的极端情况。例如。 到2020年2月29日增加十二个月(应该是2021年2月28

  • 问题内容: 我试图弄清楚如何在Pandas数据框中的日期中添加3个月,同时将其保持为日期格式,因此可以使用它来查找范围。 这是我尝试过的: 但是,出现以下错误: 问题答案: 你可以用 另一种使用方式 细节

  • 问题内容: 我已经看过了,基本上我已经发现Calendar对象可以使用以下类似方法将1个月添加到指定的日期中: 尽管我不喜欢它在日期为30或31时的行为。如果我将1个月添加到01/31/2012,输出将变为02/29/2012。当我再增加1个月时,它将变为03/29/2012。 无论如何,我是否可以强制2012年2月29日自动变为2012年3月1日? 基本上这就是我想发生的事情: 默认日期:01/