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

Greenland与Kazakhstan地区PHP时间函数返回错误的解决方法

如何获取格陵兰(Greenland)和哈萨克斯坦(Kazakhstan)的正确时间?

问题背景

使用date_default_timezone_set()和date()函数时,除格陵兰与哈萨克斯坦外,其余地区均可返回正确的日期与时间:

  • 格陵兰地区:调用America/Nuuk时区返回的时间比实际晚1小时
  • 哈萨克斯坦地区:调用Asia/Almaty时区返回的时间比实际早1小时

对应问题代码:

格陵兰问题代码

date_default_timezone_set("America/Nuuk");
echo date("Y-m-d H:i:s");

哈萨克斯坦问题代码

date_default_timezone_set("Asia/Almaty");
echo date("Y-m-d H:i:s");

问题原因

这两个地区的时区规则在PHP依赖的tzdata(时区数据库)中存在滞后,未同步当地最新的时区偏移或夏令时取消政策。

临时修复方案

格陵兰(Nuuk)

Nuuk当前采用UTC-2(全年无夏令时),可直接使用固定偏移时区替代:

// 注意:Etc/GMT+2对应UTC-2,规则为GMT+N等价于UTC-N
date_default_timezone_set("Etc/GMT+2");
echo date("Y-m-d H:i:s");

或使用更灵活的DateTime类:

$datetime = new DateTime("now", new DateTimeZone("Etc/GMT+2"));
echo $datetime->format("Y-m-d H:i:s");

哈萨克斯坦(Almaty)

Almaty当前采用UTC+6(全年无夏令时),同样使用固定偏移时区:

// 注意:Etc/GMT-6对应UTC+6,规则为GMT-N等价于UTC+N
date_default_timezone_set("Etc/GMT-6");
echo date("Y-m-d H:i:s");

或DateTime实现:

$datetime = new DateTime("now", new DateTimeZone("Etc/GMT-6"));
echo $datetime->format("Y-m-d H:i:s");

长期解决办法

更新PHP环境的tzdata时区数据库:

  • Linux系统:通过包管理器(如apt、yum)更新tzdata系统包
  • Windows系统:更新PHP的timezonedb扩展,或升级到包含最新tzdata的PHP版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:07:40