我遇到了一个问题,并且想知道是否有人可以给我一些关于原因的见解。以下代码正在将一周添加到日期:
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
答案 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()) {
如果c
和d
都是日期对象,则:
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 Date,即05/01/12和b = JS Date,即05/31/12
请注意,在国际论坛中,应避免或解释区域特定表达(如果使用)。以上是美国特定的mm / dd / yyyy格式吗?更广泛认可的格式是dd / mm / yyyy或者更好地使用ISO8601格式:yyy-mm-dd(所有符合ES5的浏览器都应该支持这些格式,但它们都还没有)。
哦,getStamp
和toDate
方法似乎试图四舍五入到最接近的秒。您可以尝试一次执行此功能的功能:
Date.prototype.roundToSecond = function() {
this.setMilliseconds(this.getMilliseconds() > 499? 1000 : 0);
}
答案 2 :(得分:0)
Kolink有正确的答案,但您可能还想查看Moment.js日期库,如果您在处理日期和格式化方面做了很多工作。