Назначение даты по умолчанию не происходит - PullRequest
0 голосов
/ 04 сентября 2018

Я не знаю, что мне здесь не хватает. Пока пользователь вводит некоторую дату в диалоговом окне, все в порядке, но если пользователь оставит диалоговое окно пустым, я ожидал, что 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;}

без успеха. Даты по умолчанию не используются.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Проблема, с которой вы столкнулись - недопустимый синтаксический анализ Даты при пустом вводе - и отсутствие использования по умолчанию 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);
...
0 голосов
/ 05 сентября 2018

ОК, если поля ввода оставлены пустыми, я ожидал, что d1 и d2 будут установлены как пустые строки. Вместо этого d1 и d2 устанавливаются со строкой значения «Неверная дата». Теперь я изменил код с помощью:

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

Любое лучшее решение приветствуется. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...