3

我创建了这个函数来增加日期(对于 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

4 回答 4

14

我想我知道出了什么问题。

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实际上是August

  • 该声明moreDay.setDate(act.getDate()+1) 没有 moreDay将日期act加上一天。因为:
    • date.getDate() 返回date变量所在月份日期
    • date.setDate(int)设置日期只是date一天,保持年和月不变)
    • 该语句的 moreDay.setDate(act.getDate()+1)作用是:
      • moreDay' day的值设置为act'day 加一。

换句话说,因为moreDay' 的值是new Date()(这是当天 - 现在11/Jun/2013我住的地方),并且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)

至此于 2013 年 6 月 4 日结束。

于 2013-06-11T22:37:47.640 回答
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);
}
于 2013-06-11T22:13:06.423 回答
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);
}

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

这种替代方案应该比setDate

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

或者你可以Date直接定义你的对象,增加一天:

moreDay = new Date(decomposed[2], decomposed[1] - 1, +decomposed[0] + 1);
于 2013-06-11T22:20:24.230 回答
0

一种方法:

var now = new Date();
        function addDays(date,days) {
            var currentDate = date.getDate();
            date.setDate(currentDate + days);
            alert(date);
        }
    addDays(now,14)
于 2016-02-09T08:11:45.227 回答