默认日期分配失败

时间:2018-09-04 18:41:40

标签: datetime google-apps-script

我不知道我在这里想念的是什么。只要用户在对话框中添加一些日期,就可以了,但是如果用户将对话框保留为空,我期望将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;}

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

2 个答案:

答案 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);
...