我不知道我在这里想念的是什么。只要用户在对话框中添加一些日期,就可以了,但是如果用户将对话框保留为空,我期望将d1
和d2
设置为预定义的日期,但是它不起作用:
var d1, d2, d1i, d2i;
// set default initial dates
d1i = "01/01/2010";
d2i = "01/01/2020";
d1 = new Date(Browser.inputBox("Insert first day in format M/D/Y. Leave empty for default " + d1i));
d2 = new Date(Browser.inputBox("Insert last day in format M/D/Y. Leave empty for default " + d2i));
// If the dialog boxes are left empty, set d1 and d2 with default values
if (d1 == "") {d1 = new Date(d1i);}
if (d2 == "") {d2 = new Date(d2i);}
var events = cal.getEvents(d1, d2, {search: text});
var sheet = SpreadsheetApp.getActiveSheet();
for (var i = 0; i < events.length; i++) {
var row = i + 2;
var details = [[
events[i].getTitle(),
events[i].getDescription(),
events[i].getLocation(),
events[i].getStartTime(),
events[i].getEndTime(),
myformula_placeholder
]];
var range = sheet.getRange(row, 1, 1, 6);
range.setValues(details);
}
我也尝试过:
if (d1 == "") {d1 = d1i;}
if (d2 == "") {d2 = d2i;}
没有成功。不使用默认日期。
答案 0 :(得分:0)
好的,如果输入框保留为空,则我希望d1和d2设置为空字符串。而是使用值字符串'Invalid Date'设置d1和d2。现在,我使用以下代码更改了代码:
if (d1 == "Invalid Date") { d1 = d1i;}.
if (d2 == "Invalid Date") { d2 = d2i;}
任何更好的解决方案将不胜感激。谢谢
答案 1 :(得分:0)
您遇到的问题-对空白输入的日期解析无效-以及由于缺少Date
构造函数调用的位置而没有使用默认的Date
。
首先验证并清除用户输入,而不是立即实例化Date对象。最明智的做法是在单独的功能中完成
。function getEnteredDate_(ui, promptMsg, defaultInput) {
const resp = ui.prompt(promptMsg);
const input = resp.getResponseText().trim();
if (!input)
input = defaultInput;
// Sanitize text for date parsing
...
// Now create the date.
var myDate = new Date(input);
// and verify proper construction
...
// Use it
return myDate;
}
使用方法如下:
// set default initial dates
const d1i = "01/01/2010";
const d2i = "01/01/2020";
const ui = SpreadsheetApp.getUi();
var d1 = getEnteredDate_(ui, "Insert first day in format M/D/Y. Leave empty for default " + d1i, d1i);
var d2 = getEnteredDate_(ui, "Insert last day in format M/D/Y. Leave empty for default " + d2i, d2i);
...