表单输入类型date-time返回字符串而不是日期

时间:2020-02-16 09:45:13

标签: javascript google-apps-script google-sheets calendar

this sheet中,

在脚本编辑器中,我们有一个HTML表单,可将​​日期和时间提交到表单中。

目的是使用日历应用程序检查提交的时间范围内是否有任何事件。

问题是日历应用正在读取提交的日期和时间(而不是日期和时间)为字符串/文本,并返回错误

找不到方法getEvents(string,string)

我将 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 个答案:

答案 0 :(得分:2)

此修改如何?我认为在您的脚本中,startTimeendTime的值是 ISO8601 的字符串值。在getEvents(startTime, endTime),要求startTimeendTime是日期对象。因此,我认为可以使用new Date()

修改后的脚本:

修改脚本后,请进行以下修改。

从:
var allEvents = cal.getEvents(startTime, endTime);
至:
var allEvents = cal.getEvents(new Date(startTime), new Date(endTime));

注意:

  • 修改Web应用程序的脚本后,请重新部署Web应用程序为新版本。这样,反映了最新的脚本。请注意这一点。

参考文献:

如果我误解了你的问题,而这不是你想要的方向,我深表歉意。