zhangjingyu
gmdate() 的本质
gmdate() 不是"绝对的日期/时间",而是 "始终按 UTC 时区格式化"。
正确理解
“// gmdate() = date() 但强制使用 UTC 时区
gmdate('Y-m-d H:i:s', $timestamp);
// 等价于:
date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s', $timestamp);”(引用内容)
关键区别
函数行为是否受时区影响date()按当前 PHP 时区格式化✅ 是gmdate()按 UTC 时区格式化(忽略当前设置)❌ 否(固定 UTC)“$timestamp = 1785851856; // 2026-08-04 13:57:36 UTC
// 场景1:PHP 时区 = Asia/Shanghai
date_default_timezone_set('Asia/Shanghai');
echo date('Y-m-d H:i:s', $timestamp); // 2026-08-04 21:57:36 (北京时间)
echo gmdate('Y-m-d H:i:s', $timestamp); // 2026-08-04 13:57:36 (UTC) ← 不受影响
// 场景2:PHP 时区 = UTC
date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s', $timestamp); // 2026-08-04 13:57:36 (UTC)
echo gmdate('Y-m-d H:i:s', $timestamp); // 2026-08-04 13:57:36 (UTC) ← 一样”(引用内容)更准确的说法:
gmdate() 是 "固定使用 UTC 时区的 date()"
它不是"绝对的",而是"固定在 UTC"的

