You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP环境下调用Google Calendar API时格式正确的日期时间被判定为无效的问题求助

解决Google Calendar API的"Invalid start time" 400错误

我之前也碰到过一模一样的问题,结合Google Calendar API的官方规范和踩坑经验,给你几个实用的排查和解决方向:

1. 确保dateTime是带引号的字符串类型

很多时候这个错误是因为代码里没有把日期时间值当作字符串传递。比如你示例里的2022-01-17T08:30:00+01:00,如果直接裸写在请求体里,会被JSON解析器当作非法的数值/语法,而不是字符串。

正确的请求结构应该把dateTime的值用双引号包裹:

{
  "start": { 
    "dateTime": "2022-01-17T08:30:00+01:00", 
    "timeZone": "Europe/Amsterdam" 
  },
  "end": { 
    "dateTime": "2022-01-17T16:30:00+01:00", 
    "timeZone": "Europe/Amsterdam" 
  }
}

如果你用的是PHP(从Google_Service_Exception推测可能是PHP环境),要确保生成的数组里dateTime的值是字符串类型,而不是未转义的原始值。

2. 避免dateTime时区偏移和timeZone参数冲突

Google Calendar API的规则是:当你同时提供dateTime(带时区偏移)和timeZone参数时,API会忽略dateTime里的偏移,转而使用timeZone指定的时区解析时间。这种混合使用很容易导致时间解析异常。

推荐两种更清晰的写法:

写法一:仅用timeZone+不带偏移的dateTime

{
  "start": { 
    "dateTime": "2022-01-17T08:30:00", 
    "timeZone": "Europe/Amsterdam" 
  },
  "end": { 
    "dateTime": "2022-01-17T16:30:00", 
    "timeZone": "Europe/Amsterdam" 
  }
}

这种方式让API明确使用你指定的时区解析本地时间,不会出现偏移冲突。

写法二:使用Zulu格式(UTC时间),不指定timeZone

Zulu格式(末尾带Z)代表UTC时间,此时不需要额外传timeZone参数:

{
  "start": { 
    "dateTime": "2022-01-17T07:30:00Z" 
  },
  "end": { 
    "dateTime": "2022-01-17T15:30:00Z" 
  }
}

这里的07:30:00Z和你原来的08:30:00+01:00是完全等价的(阿姆斯特丹当时是UTC+1时区)。

3. 检查日期时间的合理性

虽然你的时间看起来是合法的,但还是要确认:

  • 开始时间早于结束时间(这个你已经满足)
  • 没有使用API不支持的日期格式(比如用了全角符号、多余的分隔符)
  • 可以手动把生成的dateTime字符串复制到API的请求测试里,验证是否能被正常解析。

快速验证方法

你可以先构造一个最简单的请求体,比如创建一个1小时后的事件,用上面推荐的写法测试,如果能成功,再逐步调整到你需要的时间格式,就能快速定位问题所在。

内容的提问来源于stack exchange,提问作者Smigi97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:58:11