如何在JavaScript中添加月份到日期?

Kan*_*ela 207 javascript date

我想在JavaScript中添加几个月的日期.

例如:我正在插入日期06/01/2011(格式mm/dd/yyyy),现在我想在这个日期添加8个月.我想要结果02/01/2012.

因此,当添加月份时,年份也可能会增加.

Dan*_*pov 230

这里:

var newDate = new Date(date.setMonth(date.getMonth()+8));
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个错字 - 日期构造函数使用0表示1月,而不是1. (53认同)
  • 需要强调的是,运行此代码后,“date”和“newDate”都将包含相同的日期。IOW `date` 被这段代码修改。 (9认同)
  • 检查此解决方案的最后几天;) (4认同)
  • @Sampson.不,它将显示2009年3月3日:) (2认同)
  • 你为什么要两次在`jan3120091`做`new Date`?难道第二行不能是`var eight .... = jan312009.setMonth(jan312009.getMonth()+ 8);`? (2认同)
  • setMonth()方法会更改其调用日期,因此请确保您需要执行以下操作以不更改jan312009 var jan312009 = new Date(2009,0,31); var fourMonthsFromJan312009 =新日期(jan312009.getTime()); AugustMonthsFromJan312009.setMonth(jan312009.getMonth()+ 8); (2认同)

mu *_*ort 160

将您的日期拆分为年,月和日组件,然后使用日期:

var d = new Date(year, month, day);
d.setMonth(d.getMonth() + 8);
Run Code Online (Sandbox Code Playgroud)

日期将负责确定年份.

  • **小心** - 这不适用于边缘情况,例如添加到大多数月份的第31天.例如,使用此方法的2011年10月31日+ 1个月是使用Javascript的标准Date对象的2011年12月1日.http://jsfiddle.net/KyleMit/jLbbk27v/ (50认同)
  • @xehpuk,是的,当然,但这不是*大多数人所期望的.如果我加1个月,如果月份从10月到12月,我会感到惊讶."10 + 1!= 12"......如果我说的是增加31天,那么将来应该是31天.无论哪种方式,使用适合您的用例,但仍然注意边缘情况 (5认同)

Jaz*_*ret 93

我查看了datejs并删除了将日期添加到日期处理边缘情况(闰年,更短的月份等)所需的代码:

Date.isLeapYear = function (year) { 
    return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)); 
};

Date.getDaysInMonth = function (year, month) {
    return [31, (Date.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
};

Date.prototype.isLeapYear = function () { 
    return Date.isLeapYear(this.getFullYear()); 
};

Date.prototype.getDaysInMonth = function () { 
    return Date.getDaysInMonth(this.getFullYear(), this.getMonth());
};

Date.prototype.addMonths = function (value) {
    var n = this.getDate();
    this.setDate(1);
    this.setMonth(this.getMonth() + value);
    this.setDate(Math.min(n, this.getDaysInMonth()));
    return this;
};
Run Code Online (Sandbox Code Playgroud)

这将为任何应处理边缘情况的javascript日期对象添加"addMonths()"函数.感谢Coolite Inc!

使用:

var myDate = new Date("01/31/2012");
var result1 = myDate.addMonths(1);

var myDate2 = new Date("01/31/2011");
var result2 = myDate2.addMonths(1);
Run Code Online (Sandbox Code Playgroud)

- >> newDate.addMonths - > mydate.addMonths

result1 ="2012年2月29日"

result2 ="2011年2月28日"

  • 这是唯一可以考虑的解决方案:2011年10月31日+ 1? (4认同)
  • 该解决方案存在问题:https://jsfiddle.net/nikoudel/mdzaddeh/假定初始日期为“ 2011-03-11T00:00:00Z”,本地时区为赫尔辛基(GMT + 2)。如果再加上六个月,则会因为夏令时而浪费一个小时:2011年9月10日星期六,格林尼治标准时间。 (2认同)

Ale*_*lex 14

我强烈建议你看看datejs.使用它的api,它可以简单地添加一个月(以及许多其他日期功能):

var one_month_from_your_date = your_date_object.add(1).month();
Run Code Online (Sandbox Code Playgroud)

有什么好处的datejs是它处理边缘情况,因为从技术上讲,你可以使用本机Date对象及其附加方法来做到这一点.但是你最终会将头发拉到边缘的情况下,这datejs已经照顾好了你.

加上它是开源的!