2012-06-27 78 views
0

於是我就已經發布了關於該代碼的問題(這是回答):的Javascript:錯誤的日期計算

$(document).ready(Main); 

function Main() { 
    ConfigDate();   
} 


function ConfigDate() { 
    var currentTime = new Date(); 
    var dayofWeek = currentTime.getDay(); 

    var daysSinceThursday = (dayofWeek + 3) % 7 
    var lastThursday = new Date(currentTime.getDate() - daysSinceThursday); 
    var dd = lastThursday.getDate(); 

    var mm = lastThursday.getMonth() + 1; 
    var yyyy = lastThursday.getFullYear(); 

    $("#last_thursday").text(yyyy + "/" + mm + "/" + dd); 
} 

現在的問題是,出現在我的手機的日期是1969年的/ 12/31(這甚至不是星期四)。

計算上個星期四日期時我做錯了嗎?

回答

2

您正在嘗試僅根據上個星期四的月份的某一天設置日期。嘗試是這樣的:

var daysSinceThursday = (dayofWeek + 3) % 7; 
var lastThursday = new Date(currentTime.getTime()); 
lastThursday.setDate(currentTime.getDate() - daysSinceThursday); 
var dd = lastThursday.getDate(); 

var mm = lastThursday.getMonth() + 1; 
var yyyy = lastThursday.getFullYear(); 

http://jsfiddle.net/rAuRF/3/

+1

請注意,在此操作之後,'currentTime'也將被設置爲上個星期四,因爲'lastThursday'和'currentTime'都指向同一個'Date'對象。要在不修改'currentTime'的情況下設置'lastThursday',您需要創建一個新的'Date'。複製日期:'var lastThursday = new Date(currentTime.valueOf())'。但是,在這種情況下,你並不需要副本。你可以這樣做:'var lastThursday = new Date()' – gilly3

+0

@ gilly3:好點。我真正想要做的是保持OP代碼的其餘部分不變,但是如果'lastTime'在lastThursday之後被修改'Date',那麼這將是不正確的。我更新了代碼和小提琴 – nachito

3

這是因爲一個月的.getDate()回報的一天。

date.setDate(date.getDate() - daysSinceThursday); 

.setDate()將:那麼,你是基於東西小於30的序列號,這甚至不會設置上述1.

使用.setDate()您秒鐘,而不是建立一個新的日期構建日期修改你現有的日期對象,它不會返回一個新的日期。