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
相关产品推荐
相关产品推荐

