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

PHP报错:DateTimeZone::__construct(): 未知或无效时区(LHDT)求助

解决PHP 7.0.30中LHDT时区识别失败的问题

我之前也碰到过类似的时区缩写兼容问题,尤其是在老版本PHP上,咱们一步步来拆解解决:

问题根源

LHDT是Lord Howe Island Time的时区缩写,但PHP对时区缩写的支持并不是跨版本通用的——你的本地环境大概率是较新的PHP版本,附带的时区数据库(tzdata)已经包含了这个缩写的映射;而生产环境的PHP 7.0.30版本比较老旧,其内置的时区数据库还没有收录LHDT这个缩写,所以会抛出Unknown or bad timezone错误。

解决方案

1. 替换为标准时区标识符(推荐)

PHP官方推荐使用区域/城市格式的标准时区标识符,这种格式在所有支持时区功能的PHP版本中都能稳定识别。LHDT对应的标准标识符是Australia/Lord_Howe,把代码改成:

new DateTimeZone("Australia/Lord_Howe")

这个方案最可靠,完全避免了版本兼容问题。

2. 验证生产环境的时区支持

如果想确认生产环境支持的时区列表,可以在服务器上执行以下代码:

// 查看所有标准时区标识符
print_r(DateTimeZone::listIdentifiers());

// 查看所有支持的时区缩写
print_r(DateTimeZone::listAbbreviations());

执行后你会发现,PHP 7.0.30的缩写列表里确实没有LHDT,但Australia/Lord_Howe肯定在标准标识符列表中。

3. 备选:手动添加时区映射(不推荐)

如果业务上必须使用LHDT这个缩写,可以手动在代码中添加映射逻辑,但这种方法维护成本高,不建议长期使用:

$timezone = "LHDT";
try {
    $dtz = new DateTimeZone($timezone);
} catch (Exception $e) {
    // 当识别失败时,替换为标准时区
    $dtz = new DateTimeZone("Australia/Lord_Howe");
}

总结

优先使用标准时区标识符是避免这类跨版本兼容问题的最佳实践,毕竟缩写可能会随着时区规则更新而变化,而区域格式的标识符是长期稳定的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:37:42