繁体   English   中英

表单输入类型日期时间返回字符串而不是日期

[英]Form input type date-time returns a string instead of a date

这张表中

在脚本编辑器中,我们有一个 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>

这个改装怎么样? 我认为在您的脚本中, 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 Apps 的脚本时,请将 Web Apps 重新部署为新版本。 由此,反映了最新的脚本。 请注意这一点。

参考:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM