2016-06-13 37 views
0

我試圖根據給定的日期返回不同的日子,例如一週中的第一個星期一,本週的星期五以及之前和之後幾周的日子,以便我可以計算出開始和結束(我的兩份工作,每份都不同)以及那段期間的付款日期。爲什麼刪除一行會影響下一行?

當我刪除Logger.log("Prev Monday > " + addDays(pMonday, -7)); 下一行的值發生變化。被刪除的行是爲了弄亂下面的行?

我在Google應用程序腳本中使用此功能,因此我可以輕鬆地將數據從Google日曆中提取到Google表格。這也意味着沒有額外的庫。

function test_monday(){ 
    var theDate = new Date(); 
    theDate.setDate(16); 
    theDate.setMonth(5); 
    theDate.setFullYear(2016); 
    theDate.setHours(12,0,0,0) 
    Logger.log(theDate); 

    var pMonday = new Date(); 
    pMonday = getMonday(theDate) ; 
    Logger.log("pMonday: " + pMonday) 

    Logger.log("Prev Monday > " + addDays(pMonday, -7)); 
    Logger.log("Following Friday > " + addDays(pMonday, 4)); 
} 

function getMonday(date) { 
    var day = date.getDay() || 7; 
    if(day !== 1) 
     date.setHours(-24 * (day - 1)); 
    return date; 
} 

function addDays(d, n){ 
    var date = new Date(); 
    date = d; 
    var offset = n; 
    date.setHours(24 * (offset)); 
    return date; 
} 

回答

1
date = d; 

這條線在這裏完全撤消您在上線所做的工作。它說date完全相同的實例d。這意味着,無論何時修改datedate.setHours(24 * offset)),您也正在修改d。你可能會寫d.setHours(24 * offset),因爲它們的意思是一樣的。

如果你想創建一個新的Date對象相等於另一個,只需將原件傳遞到Date構造函數。所以,你可以重寫你的函數爲:

function addDays(d, n) { 
    var date = new Date(d); 
    date.setHours(24 * n); 
    return date; 
} 
+0

好,所以當我值傳遞給函數它已經被宣佈我被搞亂這事呢? – ThatChrisGuy

+0

@ThatChrisGuy號每當你傳入'pMonday'時,你都在修改這個值。它仍然是您傳入的同一對象實例,但它所代表的日期已更改。你正在爲它增加'24 * offset'小時。如果你在調用'addDays'之前和之後執行'console.log(pMonday)',你會明白我的意思。 –

+0

你沒有傳遞一個值,你傳遞一個參考。不是超一致或清晰,但這就是javascript的:) –

相關問題