默认日期分配失败



我不知道我在这里错过了什么。只要用户在对话框中放置一些日期,一切都很好,但是如果用户将对话框留空,我希望使用预定义的日期设置d1d2,但它不起作用:

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;}

没有成功。不使用默认日期。

好的,如果输入框留空,我希望将 d1 和 d2 设置为空字符串。相反,d1 和 d2 是使用值字符串"无效日期"设置的。现在我用以下方法更改了代码:

if (d1 == "Invalid Date") { d1 = d1i;}.
if (d2 == "Invalid Date") { d2 = d2i;}

任何更好的解决方案将不胜感激。谢谢

您遇到的问题 - 对空白输入进行无效的日期解析 - 以及在其位置缺少默认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);
...

相关内容

最新更新