[英]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 ,测试了代码并且它起作用了。 所以,我猜问题在于表单提交的日期时间值的格式
共享文件是可编辑版本,您可以随意编辑和修复。 提前致谢 :)
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()
}
}
<!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>
这个改装怎么样? 我认为在您的脚本中, 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));
如果我误解了您的问题,并且这不是您想要的方向,我深表歉意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.