<span><span><span class="hljs-title function_ invoke__">timezone_name_from_abbr</span></span><span>(</span><span><span class="hljs-string">"XYZ"</span></span><span>); </span><span><span class="hljs-comment">// false</span></span><span>
</span></span>
建议检查缩写拼写,或者使用 PHP 提供的 DateTimeZone::listAbbreviations() 查看支持的缩写列表。
存在歧义但未提供偏移量
例如 "CST" 同时对应美国中部和中国标准时间,如果 $gmtOffset 不明确,函数可能返回 false。
考虑夏令时的参数不匹配
$isDST 参数如果与实际情况不符,也可能导致函数无法匹配正确时区。
PHP 版本或时区数据库差异
不同 PHP 版本可能对缩写支持有所不同,如果返回 false,也要确认 PHP 的 timezone 数据库是否最新。
<span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-title class_">DateTimeZone</span></span><span>::</span><span><span class="hljs-title function_ invoke__">listAbbreviations</span></span><span>());
</span></span>
通过输出可以确认所用缩写是否存在,以及对应的偏移量。
<span><span><span class="hljs-variable">$tz</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_name_from_abbr</span></span><span>(</span><span><span class="hljs-string">"CST"</span></span><span>, </span><span><span class="hljs-number">8</span></span><span>*</span><span><span class="hljs-number">3600</span></span><span>); </span><span><span class="hljs-comment">// 对应 Asia/Shanghai</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$tz</span></span><span>; </span><span><span class="hljs-comment">// 输出 "Asia/Shanghai"</span></span><span>
</span></span>
使用偏移量可以避免歧义。
<span><span><span class="hljs-variable">$tz</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_name_from_abbr</span></span><span>(</span><span><span class="hljs-string">"EST"</span></span><span>, -</span><span><span class="hljs-number">5</span></span><span>*</span><span><span class="hljs-number">3600</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// 夏令时考虑</span></span><span>
</span></span>
当夏令时存在时,尝试传入 1 可能得到正确结果。
如果缩写匹配不稳定,可以直接使用完整时区名称:
<span><span><span class="hljs-variable">$dtz</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTimeZone</span></span><span>(</span><span><span class="hljs-string">"Asia/Shanghai"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$dtz</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getName</span></span><span>();
</span></span>
<span><span>php -r </span><span><span class="hljs-string">'echo timezone_version_get();'</span></span><span>
</span></span>
确保时区数据库更新至最新,避免某些缩写无法识别。