2

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

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/12和地点b = JS Date, ie 05/31/12

4

3 回答 3

5

你错过了()之后c.getDate

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

c.setTime(c.getTime()+7*24*60*60*1000); // adds 1 week to the date
于 2012-05-31T02:15:40.367 回答
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);  

是什么f?返回什么f.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 日期,即 05/01/12 和 b = JS 日期,即 05/31/12

请注意,在国际论坛上,如果使用区域特定的表达方式,应避免或解释。以上是美国特有的 mm/dd/yyyy 格式吗?更广泛认可的格式是 dd/mm/yyyy 或更好地使用 ISO8601 格式:yyy-mm-dd(所有兼容 ES5 的浏览器都应该原生支持,但目前还不支持)。

哦,getStampandtoDate方法似乎试图四舍五入到最接近的秒数。您可以尝试一个一次性完成的功能:

Date.prototype.roundToSecond = function() {
  this.setMilliseconds(this.getMilliseconds() > 499? 1000 : 0);
}
于 2012-05-31T03:26:25.093 回答
0

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

于 2012-05-31T02:19:06.063 回答