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

DateTime::__construct()时间解析失败,未改代码却报错求助

问题分析与解决

核心问题

错误根源在于**DateTime::__construct()默认不支持d/m h:i A这种日/月的日期格式**:

  • 当日数≤12时(比如09/08),PHP会误将其解析为月/日格式,刚好能正常运行;
  • 当日数>12时(比如13/09),解析时会把13当成月份,超出合法范围(1-12),直接抛出解析异常。

代码问题点

你直接将date('d/m h:i A')生成的字符串传入DateTime构造函数:

$ts = new DateTime(date('d/m h:i A'), new DateTimeZone('Asia/Jerusalem'));

这种写法依赖PHP默认日期解析规则,而该规则优先识别月/日格式,而非你预期的日/月格式,导致日期超过12号时触发错误。

解决方案

使用DateTime::createFromFormat()明确指定日期格式,避免解析歧义:

// 按d/m h:i A的格式解析日期
$ts = DateTime::createFromFormat('d/m h:i A', date('d/m h:i A'), new DateTimeZone('Asia/Jerusalem'));
$ts->setTimezone(new DateTimeZone("Asia/Urumqi"));

或者更高效的写法,直接获取当前DateTime对象,无需先转字符串再解析:

$ts = new DateTime('now', new DateTimeZone('Asia/Jerusalem'));
$ts->setTimezone(new DateTimeZone("Asia/Urumqi"));

另外你提到的$together变量(含$cc_name时区地区、$e_name城市),如果后续要动态设置时区,确保$cc_name/$e_name组合成的时区字符串是PHP支持的有效格式(比如Asia/Jerusalem、Asia/Urumqi),避免时区参数错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:39:54