2012-10-23 110 views
0

我想要做的是構建一個包含前7天的日期的數組。下面的代碼對我來說是這樣的。但是,當(now.getDate() - index)小於1時,它不會將日期跳回到前一個月,它只會使值爲負。在JavaScript中存儲前一週的日期數組,getDate

我試圖用(now.setDate(now.getDate() - index))替換它,希望修復它,但我似乎得到一個UNIX時間,並且絕對不是正確的。

var bars = new Array(); 
    var index = 0; 
    var NumFields = data.length - 2; 
    var now = new Date(); 
    var date = new Array(); 

    for(var i=0;i<NumFields;i++) { 
     $('.graph').append("<div class=\"bar\"></div>"); 
    } 

    $('.graph > .bar').each(function() { 
     var currentData = data[index]; 
     $(this).attr('value', currentData); 
     bars.push(currentData); 
     date.push(now.getDate() - index); 
     index++;   
    }); 

如果你想看到的問題(請記住,它不會看壞了,因爲當前日期減去7天大於零),然後去habitic.com並單擊「運行」。

感謝您的幫助!我超級迷糊了,這是一個已經難倒我到需要尋求幫助的第一個問題...

+0

由於年份和月份跨接,這個問題是一個比較複雜的比你可能會認爲這是。您必須轉換爲時間戳並返回才能正常工作。我會看看我是否可以爲你一起扔東西。 – mVChr

回答

1

不,now.setDate(now.getDate() - index)實際上是最好的方法。但它不會返回新的一天,而是新的日期實例[內部]時間戳。使兩個步驟:

now.setDate(now.getDate() - 1); // sets the date to the previous day each time 
date.push(now.getDate()); 
+0

這似乎工作得很好,我測試了一個日期轉換到前一個月!最後,我如何得到這個以包括當天呢?所以,今天+前六天。 我確信我可以弄明白,但我的大腦此刻被燒燬。 – Jerad

+0

只需在*之前將日期*推低即可 - 將其視爲循環計數器。 – Bergi

+0

太棒了!再次感謝。 – Jerad

-1

嘗試使用這樣的:

day = 24*60*60*1000 
new Date(now.getTime()-index * day); 

now.getTime()返回時間以來的毫秒數時代(1970年1月1日午夜格林威治標準時間)。 day = 24*60*60*1000計算一天中的毫秒數(24小時,60分鐘/小時,60秒/分鐘,1000毫秒/秒)。乘以天數的偏移量(index,如果我沒有弄錯),並以毫秒爲單位獲得偏移量。從getTime()中減去該值,並且獲得自所需日期以來的紀元數,然後您可以在Date()構造函數中使用該毫秒數來獲取該日期和時間的實際Date()對象。

+0

爲什麼downvote?這不僅是100%正確的,這是解釋。 – FrankieTheKneeMan

+0

這不是100%正確的,例如它有時區問題。並非所有的日子都是24小時。 – Bergi

+0

@Bergi - 它沒有時區問題 - 所有的數據對象本地化都很好。所有的日子都是24小時無法區分的。公曆(在任何你可以使用計算機的地方使用和理解)每隔(不太)四年增加一天(以上面的增量衡量)來處理這個問題。雖然你是對的,但是週期性地增加了一個閏秒,它每年只會影響這個應用程序7秒(平均),達到31536000個。所以,我想這不是100%正確 - 只有99.99998%正確。這遠遠不夠。 – FrankieTheKneeMan

0

//設置日期第一,然後推Date對象的GETDATE值入陣。

function pastweek(d){ 
    var now= d || new Date(), 
    i= 6, 
    dates= [now.getDate()]; 
    while(i--){ 
     now.setDate(now.getDate()-1); 
     dates.push(now.getDate()); 
    } 
    return dates.reverse(); 
} 

/*

pastweek(new Date(2012,9,5)) 
returned value: (Array) 
29,30,1,2,3,4,5 

*/

/*

pastweek() 
returned value: (Array) 
17,18,19,20,21,22,23 

*/

-1

我會讓你來利用此以適應你的背景,但這裏是你如何得到的日期假設今日(now)的他,上週是2012/1/3:

var now = new Date(2012, 0, 3), 
    DAY_MS = 86400000, // 1 day in milliseconds 
    dates = []; 

for (var i = 0; i < 7; i++) { 
    dates.push(new Date(now.getTime() - (i * DAY_MS))); 
} 

console.log(dates); 

// outputs: 
// [Tue Jan 03 2012 00:00:00 GMT-0800 (PST), 
// Mon Jan 02 2012 00:00:00 GMT-0800 (PST), 
// Sun Jan 01 2012 00:00:00 GMT-0800 (PST), 
// Sat Dec 31 2011 00:00:00 GMT-0800 (PST), 
// Fri Dec 30 2011 00:00:00 GMT-0800 (PST), 
// Thu Dec 29 2011 00:00:00 GMT-0800 (PST), 
// Wed Dec 28 2011 00:00:00 GMT-0800 (PST)] 
+0

並非所有的日子都是86400000毫秒 – Bergi