JS Date添加1周的问题

时间:2012-05-31 02:13:08

标签: javascript date

我遇到了一个问题,并且想知道是否有人可以给我一些关于原因的见解。以下代码正在将一周添加到日期:

while (c.getStamp() < b.getStamp()) {
    var f = this.getWeek(c);
    e.push(f);
    c = (c.getStamp() + 604800).toDate();
}

...

Date.prototype.getStamp = function() {
    return Math.round(this.getTime() / 1e3);
};

Number.prototype.toDate = function() {
    return new Date(this * 1e3);
};

我正在尝试让以下内容工作,但它会创建一个连续的循环:

while (c.getStamp() < b.getStamp()) {
    var f = this.getWeek(c);
    e.push(f);
    c = new Date(c.getFullYear(), c.getMonth(), c.getDate + 7, 0, 0, 0);
}

c = JS Date, ie 05/01/12b = JS Date, ie 05/31/12

的位置

3 个答案:

答案 0 :(得分:5)

您错过了()之后的c.getDate

除此之外,您可以这样做:

c.setTime(c.getTime()+7*24*60*60*1000); // adds 1 week to the date

答案 1 :(得分:3)

要将日期添加到日期,最简单的方法是添加7天:

var now = new Date();

// add one week exactly
now.setDate(now.getDate() + 7);

如果您以毫秒为单位添加相当于7 * 24hrs的时间,那么如果一周超过夏令时边界,则会出错。以上内容在代码中更加清晰。

在您的代码中:

> while (c.getStamp() < b.getStamp()) { 

如果cd都是日期对象,则:

while (c < b) {

更高效,更不容易出错,也更少写入。

>      var f = this.getWeek(c);  

什么是ff.getWeek返回什么?

>      e.push(f);
>      c = (c.getStamp() + 604800).toDate();   

据推测,你想给c添加一周,所以:

  c.setDate(c.getDate() + 7);

...后来

>    c = new Date(c.getFullYear(), c.getMonth(), c.getDate + 7, 0, 0, 0);
> --------------------------------------------------------^

您有语法错误,并且没有将毫秒归零。这似乎是一个更长的方式到一周到c,见上文。

  

其中c = JS Date,即05/01/12和b = JS Date,即05/31/12

请注意,在国际论坛中,应避免或解释区域特定表达(如果使用)。以上是美国特定的mm / dd / yyyy格式吗?更广泛认可的格式是dd / mm / yyyy或者更好地使用ISO8601格式:yyy-mm-dd(所有符合ES5的浏览器都应该支持这些格式,但它们都还没有)。

哦,getStamptoDate方法似乎试图四舍五入到最接近的秒。您可以尝试一次执行此功能的功能:

Date.prototype.roundToSecond = function() {
  this.setMilliseconds(this.getMilliseconds() > 499? 1000 : 0);
}

答案 2 :(得分:0)

Kolink有正确的答案,但您可能还想查看Moment.js日期库,如果您在处理日期和格式化方面做了很多工作。