php 7.4 中时区偏移符号和数值需由 php 主动输出(如 date('o') 得 +0800),再通过内联脚本或 json 传给 js;js 可直接读取或解析该字符串获取符号与数值,注意 js 的 gettimezoneoffset() 符号相反且基于本地时区。

PHP 7.4 中的时区偏移(如 `+0800` 或 `-0500`)本身不直接以“正负号 + 数字”形式暴露给 JavaScript,因为 JS 运行在浏览器端,而 PHP 运行在服务端。要让 JS 获取 PHP 的时区偏移**符号(+ 或 -)和数值**,需通过 PHP 主动输出该信息(例如嵌入 HTML、返回 JSON 或通过 AJAX),JS 再读取解析。
PHP 端:用 date() 或 DateTime 输出带符号的偏移
PHP 的 date('O') 返回形如 +0800 或 -0500 的 4 位字符串(含正负号,无冒号);date('P') 返回带冒号的格式(如 +08:00)。这是最直接的方式:
<?php $offset = date('O'); // 例如:'+0800' 或 '-0500'
echo "<script>window.PHP_TIMEZONE_OFFSET = '$offset';";
?>这样 JS 就能直接访问 window.PHP_TIMEZONE_OFFSET,它已是带符号的字符串。
JS 端:提取符号和数值(可选解析)
如果只需符号(+ 或 -),可直接取首字符;若还需小时/分钟数,可简单解析:
-
获取符号:
const sign = offset.charAt(0); // '+' 或 '-' -
获取小时和分钟:
const [_, h, m] = offset.match(/([+-])(\d{2})(\d{2})/) || []; // h='08', m='00' -
转为分钟偏移(整数):
const totalMinutes = (sign === '+' ? 1 : -1) * (parseInt(h) * 60 + parseInt(m));
更健壮的做法:PHP 输出结构化数据
避免字符串拼接风险,推荐 PHP 输出 JSON 数据(尤其用于 AJAX 场景):
<?php $dt = new DateTime();
$offsetSeconds = $dt->getOffset(); // 单位:秒
$offsetHours = $offsetSeconds / 3600;
$offsetStr = $dt->format('O');
echo json_encode([
'offset_string' => $offsetStr, // '+0800'
'offset_hours' => round($offsetHours, 1), // 8.0
'offset_minutes'=> $offsetSeconds / 60, // 480
'sign' => $offsetStr[0]
]);JS 用 fetch() 或直接内联 JSON 解析即可安全拿到符号与数值。
注意:不要混淆 JS 的 getTimezoneOffset()
JS 自身的 new Date().getTimezoneOffset() 返回的是**本地时区相对于 UTC 的分钟偏移,且符号相反**(例如东八区返回 -480,即 UTC+8 → -480 分钟)。它反映的是浏览器所在系统设置,和 PHP 服务器时区无关。若需对齐 PHP 时区,请确保 PHP 设置了正确时区(date_default_timezone_set('Asia/Shanghai')),再输出其偏移。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











