2012-05-31 41 views
1

我有一個問題,並想知道是否有人可以給我一點洞察力,爲什麼。下面的代碼工作一週增加日期:JS添加1周的日期問題

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

+0

哇,我從來沒有看到有人在不玩高爾夫球時使用'1e3'。 – Ryan

回答

5

您錯過了c.getDate之後的()

除此之外,你可以這樣做:

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

或者'6.048e8'! :) – Ryan

0

Kolink有正確的答案,但你可能也想看看的Moment.js最新的圖書館,如果你做了很多工作,與操作日期並格式化它們。

+2

這可能是更好的評論。 – Ryan

+0

這將是一個很好的答案,如果它顯示的代碼示例,這將說明爲什麼這是一個偉大的圖書館看看 – Kato

2

一週增加一個日期,最簡單的方法就是加7天:

var now = new Date(); 

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

如果添加的7等值毫秒* 24小時,你會是不正確的,如果一週跨越日光節省了邊界。上面的代碼更清晰一些。

在您的代碼:

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

如果cd都是Date對象,則:

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日期,即05/01/12和b = JS日期,即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); 
}