在JavaScript中向日期添加月份

我想在用户输入的结束日期前加上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中向日期添加月份 的全部内容, 来源链接: utcz.com/qa/400535.html

回到顶部