Тип ввода формы date-time возвращает строку вместо даты - PullRequest
1 голос
/ 16 февраля 2020

В этот лист ,

Из редактора скриптов у нас есть форма HTML, которая отправляет даты и время на лист.

Цель - проверить с приложением календаря, если в представленном диапазоне времени есть какие-либо события.

Проблема заключается в том, что приложение календаря считывает отправленные даты и время в виде строки / текста, а не даты и время, и возвращает ошибку

Не удается найти метод getEvents (строка, строка)

Я вручную изменил входные данные с 2020-02-21T18: 00 на 2020-02-21 18: 00: 00 , протестировал код и все заработало. Итак, я предполагаю, что проблема в формате значений времени и даты, представленных в форме

Общий файл является редактируемой версией, не стесняйтесь редактировать и исправлять. Заранее спасибо:)

Скрипт Google Apps

function doPost (e) {
  Logger.log(JSON.stringify(e))

  if (!e || !e.parameter) {
    return;
  }

  var lock = LockService.getScriptLock();
  lock.tryLock(10 * 1000);

  try {

    // Form response sheet
    var doc = SpreadsheetApp.getActive();
    var sheet = doc.getSheetByName(sheetName);
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow() + 1;
    var newRow = headers.map(function(header) {
      return header === 'Timestamp' ? new Date() : e.parameter[header]
    });
    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);

    // Get all events for the time range
    var startTime = newRow[1];
    var endTime = newRow[2];
    var cal = CalendarApp.getCalendarById("###");
    var allEvents = cal.getEvents(startTime, endTime);
    if (allEvents.length > 0) {
    return ContentService
    .createTextOutput(JSON.stringify('Not Available. Thanks'))
      .setMimeType(ContentService.MimeType.JSON)
    }else {
    return ContentService
    .createTextOutput(JSON.stringify('Available. Thanks'))
      .setMimeType(ContentService.MimeType.JSON)
    };

  }

  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  finally {
    lock.releaseLock()
  }
}

HTML:

<!DOCTYPE html>
<html lang="en">
<body>

<form name="Class1" id="Class1" action="https://script.google.com/macros/s/###/exec" target="_blank" method="POST">

Start Date & Time
<input type="datetime-local" required name="Start Date & Time">

End Date & Time
<input type="datetime-local" required name="End Date & Time">

<button type="submit">Check</button>

</form>

</body>
</html>

1 Ответ

2 голосов
/ 16 февраля 2020

Как насчет этой модификации? Я думаю, что в вашем скрипте значения startTime и endTime являются строковыми значениями ISO8601 . И в getEvents(startTime, endTime), startTime и endTime должны быть объектами даты. Поэтому я думаю, что можно использовать new Date().

Модифицированный скрипт:

Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.

С:
var allEvents = cal.getEvents(startTime, endTime);
Кому:
var allEvents = cal.getEvents(new Date(startTime), new Date(endTime));

Примечание:

  • При изменении сценария веб-приложений повторно разверните веб-приложения как новую версию. Этим отражается последний сценарий. Пожалуйста, будьте осторожны с этим.

Ссылки:

Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужно, я приношу свои извинения.

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