在this sheet中,
在脚本编辑器中,我们有一个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>
答案 0 :(得分:2)
此修改如何?我认为在您的脚本中,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));
如果我误解了你的问题,而这不是你想要的方向,我深表歉意。