2016-11-28 73 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

该项目是一个时间表。所以每个月都有自己的工作表。如果用户有一周休息时间,并且需要输入那个时间,他们当前所做的就是输入开始日期和结束日期,脚本就会去查找这些日期并为他们插入一条记录。 我需要做的是在开始日期和结束日期之间输入每个日期的记录。 –

相关问题