在日期中添加月份不适用于JavaScript

时间:2018-12-24 10:10:10

标签: javascript

我只想在JavaScript中给定日期添加45个月。一世  尝试过这个:

var startDateFormat = new Date(2018, 11, 24); // 11 is for January starts from 0
var addDate = startDateFormat.setMonth(startDateFormat.getMonth() + 45); //want to add 45 months
console.log(new Date(addDate).getFullYear() + "-" + new Date(addDate).getMonth() + 1 + "-" + new Date(addDate).getUTCDate())

但是结果是2019-101-23。 谁能帮助我为什么会这样?

4 个答案:

答案 0 :(得分:1)

那里有一些问题:

  • setMonth修改调用实例的状态,通常不使用其返回值。
  • + 1之后您要执行的getMonth正在向{em> string 中添加"1"。如果希望以数字形式将其与getMonth分组。
  • 请勿结合使用UTC方法和非UTC方法,在所有调用中或在所有调用中均不使用UTC。
  • 您不必在各地创建新日期,只需使用第一个日期即可。
  • 不太确定您所说的“ 11月代表1月从0开始”是什么意思。 11是12月,而不是1月。

所以:

var dt = new Date(2018, 11, 24); // 11 is for January starts from 0
dt.setMonth(dt.getMonth() + 45); //want to add 45 months
console.log(dt.getFullYear() + "-" + (dt.getMonth() + 1) + "-" + dt.getDate());
// Note parens ----------------------^-----------------^

答案 1 :(得分:0)

您应将new Date(addDate).getMonth() + 1放在括号中。您正在构建一个字符串,并且由于没有提供明确的优先级,因此首先添加新的Date(addDate).getMonth(),然后将1连接到该字符串。

尝试一下:

var startDateFormat = new Date(2018, 11, 24);

var addDate = startDateFormat.setMonth(startDateFormat.getMonth() + 45);

console.log(new Date(addDate).getFullYear() + "-" + (new Date(addDate).getMonth() + 1) + "-" + new Date(addDate).getUTCDate())

或模板字符串:

var startDateFormat = new Date(2018, 11, 24);

var addDate = startDateFormat.setMonth(startDateFormat.getMonth() + 45);

console.log(`${new Date(addDate).getFullYear()}-${new Date(addDate).getMonth() + 1}-${new Date(addDate).getUTCDate()}`);

答案 2 :(得分:0)

45个月,表示3年+ 9个月。因此,请使用javascript除法器和模运算符之类的方法。

        var startDateFormat = new Date(2018, 11, 24); // 11 is for January starts from 0

    var year = startDateFormat.setYear(startDateFormat.getFullYear() + (45 / 12));

    if ((startDateFormat.getMonth() + 1 + (45 % 12)) > 12)
    {
        year = new Date(year).setYear(new Date(year).getFullYear() + 1);


        var month = startDateFormat.setMonth(startDateFormat.getMonth() + (45 % 12) - 12 + 1);
    }
    else
    {
        var month = startDateFormat.setMonth(startDateFormat.getMonth() + (45 % 12) + 1);
    }


    console.log(new Date(year).getFullYear() + "-" + new Date(month).getMonth() + "-" + new Date(month).getDate())

谢谢

答案 3 :(得分:-2)

看看您的代码,看来您需要在项目中处理很多日期。在这种情况下,我建议您尝试一下momentjs库,该库使玩日期变得非常容易。

例如

moment([2010, 0, 31]);                  // January 31
moment([2010, 0, 31]).add(1, 'months'); // February 28

类似地,它具有大量易于使用的功能。 有关更多信息,请参见http://momentjs.com/ 以及有关同一次访问http://momentjs.com/docs/

的文档