下周末javascript中的日期时间返回无效日期

时间:2012-08-29 19:50:51

标签: javascript jquery date datetime

现在这个代码适用于明天和下个月 - 周末使用工作,除非现在它接近月末它导致错误。我的startdate设置为8/31/12并且enddate是8/34/12(在Sql中转换为DateTime时会出现错误。)

我成功地做数学添加一天,并添加一个月,但是当谈到在下个月添加天数时它会中断。我想我理解为什么这是hapening,它是日期 - “29”把它变成int然后添加 - 我想我将在12月的“下个月”得到同样的问题。

我的问题是,将日期添加到javascript日期的正确方法(或任何工作方式)是什么,它可以了解每月的日期。

        var d = new Date();
        var startdate;
        var enddate;

         if ($('._tomorrow').attr("checked") == "checked") {
                startdate = [d.getMonth() + 1, d.getDate() + 1, d.getFullYear()].join('/');
                enddate = [d.getMonth() + 1, d.getDate() + 2, d.getFullYear()].join('/');
            }
            if ($('._weekend').attr("checked") == "checked") {
                startdate = [d.getMonth() + 1, d.getDate() + 6 - d.getDay(), d.getFullYear()].join('/');
                enddate = [d.getMonth() + 1, ( d.getDate() + 6 - d.getDay()) + 2, d.getFullYear()].join('/');
            }
            if ($('._nextmonth').attr("checked") == "checked") {
                startdate = [d.getMonth() + 2, 1, d.getFullYear()].join('/');
                enddate = [d.getMonth() + 2, 29 , d.getFullYear()].join('/');
            }

2 个答案:

答案 0 :(得分:2)

您需要构建一个新的日期对象,其中包含调整后的值。现在你只是采取一些随机数字并增加它们,例如。

31+3/8/2012 -> 34/8/2012, not 3/9/2012

首先做这样的事情:

d.setMonth(d.getMonth()+ 2)

内部JS会适当调整日/月/年以说明每个期间结束时造成的“溢出”,并且仍会产生有效日期。

答案 1 :(得分:0)

要添加指定的天数,请创建一个新的Date对象,然后使用d.setDate(d.getDate() + n),其中n是要添加的所需天数。

如果您再次致电getYear()getMonth()getDate(),您会发现他们已被“更正”为有效值:

> d = new Date()
Wed Aug 29 2012 20:57:12 GMT+0100 (BST)
> [d.getDate(), d.getMonth() + 1]
[29, 8]
> d.setDate(d.getDate() + 10);
1347134232993
> [d.getDate(), d.getMonth() + 1]
[8, 9]

添加月份并不是那么简单,因为您需要定义当下个月比当前月份短时会发生什么 - 例如什么日期是“1月31日之后的一个月”?

虽然计算下个月的 start 很容易!

var now = new Date();
var start = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var end   = new Date(now.getFullYear(), now.getMonth(), now.getDate());

if ($('._tomorrow').is(':checked')) {
    start.setDate(now.getDate() + 1);
      end.setDate(now.getDate() + 2);
} else if ($('._weekend').is(':checked')) {
    start.setDate(now.getDate() + 6 - now.getDay());
      end.setDate(now.getDate() + 8 - now.getDay());
} else if ($('._nextmonth').is(':checked')) {
    start.setDate(1);
      end.setDate(1);
    start.setMonth(now.getMonth() + 1);
      end.setMonth(now.getMonth() + 2);
}

var startStr = [start.getMonth() + 1, start.getDate(), start.getFullYear()].join('/');
var endStr = [end.getMonth() + 1, end.getDate(), end.getFullYear()].join('/');

请参阅http://jsfiddle.net/alnitak/nTSMg/