是否可以在请求正文中使用模板文字对 Google 日历 API 进行忙/闲查询?
Is it possible to make a freebusy query to the Google Calendar API with a template literal in the request body?
var freeRequest = gapi.client.calendar.freebusy.query({
"items": [
{"id": calendarid}
],
"timeMin": `"${date.value}T${startTime.value}:00.000Z"`,
"timeMax": `"${date.value}T${endTime.value}:00.000Z"`,
"timeZone": "GMT+01:00",
});
我想通过 freebusy query
检查日历是否忙碌
我知道该请求仅适用于日期格式:YYYY-MM-DDTHH:MM:SS.MMMZ。
我的计划是将从 html 输入中获得的值粘贴到字符串文字中,然后相应地对其进行格式化。当我 console.log:
`"${date.value}T${endTime.value}:00.000Z"`
控制台以正确的格式给我日期(例如“2021-03-31T18:29:00.000Z”)。但是在我的应用程序中发送请求时,它给了我一个 400 错误请求错误。我猜问题出在字符串文字上,因为 timeMin 和 timeMax 值应该只用引号引起来而不是
``
我也尝试将日期保存在变量中,但这也没有用。
有办法解决吗?
我能够使用 Apps 脚本重现您的问题,因为它也使用 Javascript。您的发现是正确的,当您使用模板文字时,请求参数 timeMin
和 timeMax
变为字符串而不是 datetime
格式。我所做的是使用 (+) 运算符连接字符串并且它有效。
示例代码:
var calendarId = "sample@group.calendar.google.com";
var date = {
value: "2021-04-03"
}
var startTime = {
value: "01:00"
}
var endTime = {
value: "05:00"
}
// Bad request
var resource1 = {
timeMin: `"${date.value}T${startTime.value}:00.000Z"`,
timeMax: `"${date.value}T${endTime.value}:00.000Z"`,
items: [
{
id: calendarId
}
],
timeZone: "GMT+08:00"
};
Logger.log(resource1);
// Successful request
var resource2 = {
timeMin: date.value+"T"+startTime.value+":00.000Z",
timeMax: date.value+"T"+endTime.value+":00.000Z",
items: [
{
id: calendarId
}
],
timeZone: "GMT+08:00"
};
Logger.log(resource2);
var request = Calendar.Freebusy.query(resource2);
Logger.log(request);
输出:
6:38:55 AM Notice Execution started
6:38:56 AM Info {items=[{id=sample@group.calendar.google.com}], timeMax="2021-04-03T05:00:00.000Z", timeMin="2021-04-03T01:00:00.000Z", timeZone=GMT+08:00}
6:38:56 AM Info {items=[{id=sample@group.calendar.google.com}], timeMax=2021-04-03T05:00:00.000Z, timeMin=2021-04-03T01:00:00.000Z, timeZone=GMT+08:00}
6:38:56 AM Info {timeMax=2021-04-03T05:00:00.000Z, calendars={sample@group.calendar.google.com={busy=[]}}, kind=calendar#freeBusy, timeMin=2021-04-03T01:00:00.000Z}
6:38:57 AM Notice Execution completed
- 注意
timeMin
和 timeMax
在 resource1
变量中变成字符串,而在 resource2
中它们不是字符串格式
var freeRequest = gapi.client.calendar.freebusy.query({
"items": [
{"id": calendarid}
],
"timeMin": `"${date.value}T${startTime.value}:00.000Z"`,
"timeMax": `"${date.value}T${endTime.value}:00.000Z"`,
"timeZone": "GMT+01:00",
});
我想通过 freebusy query
检查日历是否忙碌我知道该请求仅适用于日期格式:YYYY-MM-DDTHH:MM:SS.MMMZ。 我的计划是将从 html 输入中获得的值粘贴到字符串文字中,然后相应地对其进行格式化。当我 console.log:
`"${date.value}T${endTime.value}:00.000Z"`
控制台以正确的格式给我日期(例如“2021-03-31T18:29:00.000Z”)。但是在我的应用程序中发送请求时,它给了我一个 400 错误请求错误。我猜问题出在字符串文字上,因为 timeMin 和 timeMax 值应该只用引号引起来而不是
``
我能够使用 Apps 脚本重现您的问题,因为它也使用 Javascript。您的发现是正确的,当您使用模板文字时,请求参数 timeMin
和 timeMax
变为字符串而不是 datetime
格式。我所做的是使用 (+) 运算符连接字符串并且它有效。
示例代码:
var calendarId = "sample@group.calendar.google.com";
var date = {
value: "2021-04-03"
}
var startTime = {
value: "01:00"
}
var endTime = {
value: "05:00"
}
// Bad request
var resource1 = {
timeMin: `"${date.value}T${startTime.value}:00.000Z"`,
timeMax: `"${date.value}T${endTime.value}:00.000Z"`,
items: [
{
id: calendarId
}
],
timeZone: "GMT+08:00"
};
Logger.log(resource1);
// Successful request
var resource2 = {
timeMin: date.value+"T"+startTime.value+":00.000Z",
timeMax: date.value+"T"+endTime.value+":00.000Z",
items: [
{
id: calendarId
}
],
timeZone: "GMT+08:00"
};
Logger.log(resource2);
var request = Calendar.Freebusy.query(resource2);
Logger.log(request);
输出:
6:38:55 AM Notice Execution started
6:38:56 AM Info {items=[{id=sample@group.calendar.google.com}], timeMax="2021-04-03T05:00:00.000Z", timeMin="2021-04-03T01:00:00.000Z", timeZone=GMT+08:00}
6:38:56 AM Info {items=[{id=sample@group.calendar.google.com}], timeMax=2021-04-03T05:00:00.000Z, timeMin=2021-04-03T01:00:00.000Z, timeZone=GMT+08:00}
6:38:56 AM Info {timeMax=2021-04-03T05:00:00.000Z, calendars={sample@group.calendar.google.com={busy=[]}}, kind=calendar#freeBusy, timeMin=2021-04-03T01:00:00.000Z}
6:38:57 AM Notice Execution completed
- 注意
timeMin
和timeMax
在resource1
变量中变成字符串,而在resource2
中它们不是字符串格式