2016-11-28 82 views
0

我正在構建時間表電子表格。我想添加一個允許用戶輸入一段假期的功能,方法是輸入開始日期和結束日期,然後自動標記出兩者之間的日期。我有以下內容,它會在相應的開始日期和結束日期之間輸入值,但不是中間的日期。有沒有建立一個我可以循環的日期數組?Google Apps腳本:在兩個日期之間獲取日期數組

function updateLeave() { 
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Front Page"); 
var startDate = ss.getRange("C15").getValue(); 
var endDate = ss.getRange("C16").getValue(); 
var type = ss.getRange("C17").getValue(); 
var creditTime = ss.getRange("C18").getValue(); 

var allSheets = SpreadsheetApp.getActiveSpreadsheet(); 
var sheets = allSheets.getSheets(); 
sheets.forEach (function (sheet) { 

var columnB = sheet.getRange(2, 2, 70, 1); 
var bValues = columnB.getValues(); 
var today = startDate; 
for (var i = 0; i < bValues.length; i++) { 
var fDate = new Date(bValues[i][0]); 
if (fDate.getDate() == today.getDate() && 
    fDate.getMonth() == today.getMonth() && 
    fDate.getFullYear() == today.getFullYear()) { 
    sheet.getRange(i + 2, 10, 1, 1).setValue(type); 
    sheet.getRange(i + 2, 9, 1, 1).setValue(creditTime); 
} 
} 
}) 

sheets.forEach (function (sheet) { 

var columnB = sheet.getRange(2, 2, 70, 1); 
var bValues = columnB.getValues(); 
var today = endDate; 
for (var i = 0; i < bValues.length; i++) { 
var fDate = new Date(bValues[i][0]); 
if (fDate.getDate() == today.getDate() && 
    fDate.getMonth() == today.getMonth() && 
    fDate.getFullYear() == today.getFullYear()) { 
    sheet.getRange(i + 2, 10, 1, 1).setValue(type); 
    sheet.getRange(i + 2, 9, 1, 1).setValue(creditTime); 
} 
} 

}) 
} 

回答

0

怎麼是這樣的:

var DAY_MILLIS = 24 * 60 * 60 * 1000; 

function main() { 
    var a = new Date('2016/01/01'); 
    var b = new Date('2016/01/03'); 
    var dates = createDateSpan(a, b); 
} 

function createDateSpan(startDate, endDate) { 
    if (startDate.getTime() > endDate.getTime()) { 
    throw Error('Start is later than end'); 
    } 

    var dates = []; 

    var curDate = new Date(startDate.getTime()); 
    while (!dateCompare(curDate, endDate)) { 
    dates.push(curDate); 
    curDate = new Date(curDate.getTime() + DAY_MILLIS); 
    } 
    dates.push(endDate); 
    return dates; 
} 

function dateCompare(a, b) { 
    return a.getFullYear() === b.getFullYear() && 
    a.getMonth() === b.getMonth() && 
    a.getDate() === b.getDate(); 
} 

main功能顯示使用

+0

好吧,偉大的一個例子。這似乎工作,但我不知道如何讓它進入我的腳本來循環每個日期和輸入到相關的單元格。 –

+0

然後你想用日期列表來做什麼?你希望他們放在工作表上? – Bardy

+0

該項目是一個時間表。所以每個月都有自己的工作表。如果用戶有一週休息時間,並且需要輸入那個時間,他們當前所做的就是輸入開始日期和結束日期,腳本就會去查找這些日期併爲他們插入一條記錄。 我需要做的是在開始日期和結束日期之間輸入每個日期的記錄。 –

相關問題