是否可以在请求正文中使用模板文字对 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。您的发现是正确的,当您使用模板文字时,请求参数 timeMintimeMax 变为字符串而不是 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
  • 注意 timeMintimeMaxresource1 变量中变成字符串,而在 resource2 中它们不是字符串格式