Javascript:setDate(DATE + day)不更新月份

时间:2013-06-11 22:08:57

标签: javascript

我创建了这个函数来增加日期(对于jQuery UI Datepicker):

function addDay(date) {
    var moreDay = new Date();
    var decomposed = date.split("-");
    var act = new Date(decomposed[2], decomposed[1], decomposed[0]);
    moreDay.setDate(act.getDate()+1);
    return moreDay;
}

所以,它组合日期(例如:12-06-2013(dd-mm-YYYY))并将值放入一个新的日期,然后加上一天。它有效,但月份不会改变。例如,我将函数更改为:

function addDay() {
    var moreDay = new Date();
    var act = new Date(2013, 7, 3);
    moreDay.setDate(act.getDate()+1);
    alert(moreDay);
}

它将于2013年6月4日返回..它怎么可能?

4 个答案:

答案 0 :(得分:13)

我想我看到了什么问题。

function addDay() {
    var moreDay = new Date();
    var act = new Date(2013, 7, 3);
    moreDay.setDate(act.getDate()+1);
    alert(moreDay);
}
  

它将于2013年6月4日返回..它怎么可能?

您必须考虑以下几点:

  • 创建日期new Date(2013, 7, 3) 创建日期 03 / Jul / 2013
    • 月份从零开始,这意味着它们从0到11,而不是1到12。
      • 这样,7月实际上是八月
  • 语句moreDay.setDate(act.getDate()+1) 不会使 moreDay日期act加上一天。因为:
      {li> date.getDate() returns the day of the month date变量
    • date.setDate(int)设置date当天,让年份和月份保持完整)
    • moreDay.setDate(act.getDate()+1)语句的作用是:
      • moreDay设置为act天的值加一。

换句话说,由于moreDay的值为new Date()(现在是这一天 - 现在 11 / Jun / 2013 我居住的地方),{ {1}}的日期为act,声明评估的确如此:

3

截至2013年6月4日。

答案 1 :(得分:5)

moreDay.setDate(act.getDate()+1);

这只会增加一天。你为什么期望它也增加一个月呢?

如果您还想添加一个月,请尝试以下方法:

function addDay() {
    var moreDay = new Date();
    var act = new Date(2013, 7, 3);
    moreDay.setMonth(act.getMonth()+1); // add one month
    moreDay.setDate(act.getDate()+1); // add one day
    alert(moreDay);
}

答案 2 :(得分:4)

您不清楚自己想要对自己的功能做些什么。如果您想要约会并添加一天,请尝试使用:

function addDay(date) {
    var decomposed = date.split("-"),
        moreDay = new Date(decomposed[2], decomposed[1] - 1, decomposed[0]);
    moreDay.setDate(moreDay.getDate() + 1);
    alert(moreDay);
}

请注意,在常见的dd-mm-yyyy日期中,1月为1,而定义Date对象1月为0,因此为- 1

此替代方案应该比setDate

更快
moreDay.setTime(moreDay.getTime() + 864e5);

或者您可以使用添加的日期直接定义Date对象:

moreDay = new Date(decomposed[2], decomposed[1] - 1, +decomposed[0] + 1);

答案 3 :(得分:0)

一种方法:

var now = new Date();
        function addDays(date,days) {
            var currentDate = date.getDate();
            date.setDate(currentDate + days);
            alert(date);
        }
    addDays(now,14)