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

The*_*oss 3 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;
}
Run Code Online (Sandbox Code Playgroud)

因此,它组合日期(例如: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);
}
Run Code Online (Sandbox Code Playgroud)

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

acd*_*ior 13

我想我看到了什么麻烦.

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

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

您必须考虑以下几点:

  • 日期的创作new Date(2013, 7, 3)没有创建之日起03 /七月/ 2013:
    • 月份从零开始,意味着它们从0到11,而不是1到12.
      • 这样,月份7实际上是八月.

  • 该声明moreDay.setDate(act.getDate()+1) 不会使 moreDay日期act加一天.因为:
    • date.getDate() 返回当月的的date变量
    • date.setDate(int)设置一天date(仅仅一天,留下的年份和月份完好)
    • 该声明的 moreDay.setDate(act.getDate()+1)作用是:
      • 设置moreDay一天的价值act的一天加一.

换句话说,就像moreDay's的价值new Date()(现在是当天 - 现在是我生活的2013年6月11日),act当天就是3,声明评估的确是:

Step #1: moreDay.setDate( act.getDate() + 1 );
Step #2: moreDay.setDate( (03/Aug/2013).getDate() + 1 );
Step #3: moreDay.setDate( 03 + 1 );
Step #4: moreDay.setDate( 4 );
Step #5: (11/Jun/2013).setDate( 4 );
Step #6: (04/Jun/2013)
Run Code Online (Sandbox Code Playgroud)

截至2013年6月4日.


Doo*_*nob 5

moreDay.setDate(act.getDate()+1);
Run Code Online (Sandbox Code Playgroud)

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

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

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);
}
Run Code Online (Sandbox Code Playgroud)


Max*_*Art 5

不清楚你想用你的函数做什么。如果您想约会并添加一天,请尝试以下操作:

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

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

这种替代方法应该比setDate

moreDay.setTime(moreDay.getTime() + 864e5);
Run Code Online (Sandbox Code Playgroud)

或者您可以Date直接添加一天来定义您的对象:

moreDay = new Date(decomposed[2], decomposed[1] - 1, +decomposed[0] + 1);
Run Code Online (Sandbox Code Playgroud)