可能重复:
Javascript函数将X个月添加到日期
我想为用户输入结束日期添加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'));
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.谢谢!
Rob*_*obG 37
您需要获得添加月份的业务规则.简单的解决方案是:
function addMonths(dateObj, num) {
return dateObj.setMonth(dateObj.getMonth() + num);
}
Run Code Online (Sandbox Code Playgroud)
但是,这将改变7月31日至9月31日,将改为10月1日.此外,1月31日加1个月是2月31日,根据是否是闰年,将转换为3月2日或3日.
您可能期望第一个是9月30日,第二个是2月28日或29日(取决于它是否是闰年).
因此,如果您希望观察"月末",您需要执行以下操作:
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;
}
Run Code Online (Sandbox Code Playgroud)
但要检查那些负责业务规则的人是否是他们想要的.
上述方法效果很好,但是为了回应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());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9864 次 |
最近记录: |