Javascript 电子表格和数组之间的日期操作
我试图创建一个函数来查看日期列表(一年的学校日历),并与用户提示中的日期进行比较,直到在B列中设置了一个字符串(在本例中为“Summer holidays”),前提是B列中没有与单元格对应的其他值 我所拥有的: 如果我在输入中设置9月12日,我期望的是:Javascript 电子表格和数组之间的日期操作,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我试图创建一个函数来查看日期列表(一年的学校日历),并与用户提示中的日期进行比较,直到在B列中设置了一个字符串(在本例中为“Summer holidays”),前提是B列中没有与单元格对应的其他值 我所拥有的: 如果我在输入中设置9月12日,我期望的是: function setTrimesters(){ 变量表= SpreadsheetApp.getActive().getSheetByName(“calendar2017”); //孕早期开始 变量输入=ui.prompt(“设置妊娠第一天(
function setTrimesters(){
变量表=
SpreadsheetApp.getActive().getSheetByName(“calendar2017”);
//孕早期开始
变量输入=ui.prompt(“设置妊娠第一天(DD/MM)”;
var value=input.getResponseText();
var Allstartendetrimests=[valorInici1rTri]
//获取数据范围
var dataRange=sheet.getRange('A1:B'+sheet.getLastRow());
//获取数据范围值
var data=dataRange.getDisplayValues();
对于(var i=0;i
脚本只使用日期的day值。然后,在10月1日到11日,脚本也指定了值“Summer holidays”
在比较之前,我不知道如何获取日期和月份值。我已尝试将NumberFormat设置为毫秒或天(类似于42895左右)…但电子表格应用程序和应用程序脚本在处理日期时存在一些限制
提前感谢您的帮助问题在于,您将日期作为字符串处理,因此它们会按字典顺序进行比较。由于第一天,4/9先于5/7,这不是您想要的。我建议
- 使用
而不是getValues
。它将检索JavaScript日期对象而不是字符串。然后比较getDisplayValues
感谢您的帮助,我正在将您的解决方案集成到我的结构中,如果它正常工作,我稍后将发布一个答案供共享。再次感谢!
function setTrimesters() { var sheet = SpreadsheetApp.getActive().getSheetByName("calendar2017"); // Start of 1st trimester var input = ui.prompt("Set first day of trimester (DD/MM)"); var value = input.getResponseText(); var allStartEndTrimesters = [valorInici1rTri] // Get dataRange var dataRange = sheet.getRange('A1:B'+sheet.getLastRow()); // Get dataRange values var data = dataRange.getDisplayValues(); for (var i = 0 ; i < data.length ; i++) { if (data[i][0] < value) { if (data[i][1] == '') { data[i][1] = "Summer holidays"; } } } dataRange.setValues(data); }
function testSummer() { var sheet = SpreadsheetApp.getActiveSheet(); var userEnteredDate = "26/07"; // what you get from user var dateParts = userEnteredDate.split("/"); var beginning = new Date(); beginning.setMonth(dateParts[1] - 1, dateParts[0]); beginning.setHours(0, 0, 0, 0); // so it's 0 hour of the day entered, in the current year var inputData = sheet.getRange('A1:A'+sheet.getLastRow()).getValues(); var outputRange = sheet.getRange('B1:B'+sheet.getLastRow()); var outputData = outputRange.getValues(); for (var i = 0; i < inputData.length; i++) { if (inputData[i][0] < beginning && outputData[i][0] == "") { outputData[i][0] = "summer vacation"; } } outputRange.setValues(outputData); // not overwriting input }