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

如何将时间差值变量添加到PHP日期时间变量中

问题:如何将时间差值变量引入日期计算?

服务器API返回的是GMT时间,我已经算出本地时间和GMT的小时差值变量$ts3,现在想把这个差值加到指定日期变量$menue_datum里,但不知道怎么正确插入$ts3。

我之前的差值计算代码是这样的:

$df = "G:i:s";  // 用简单时间格式计算差值
$tz = 'Europe/Berlin';
$tz_obj = new DateTimeZone($tz);
$today = new DateTime("now", $tz_obj);
$ts1 = $today->format($df); // 本地时间
$ts2 = gmdate($df); // 当前UTC时间戳
$ts3 = $ts1-$ts2; // 差值应该是2

用固定差值的代码能正常运行:

$newDate = date('Y-m-d H:i:s', strtotime($menue_datum. ' + 2 hours'));

但我尝试插入变量的写法不确定是否正确:

$newDate = date('Y-m-d H:i:s', strtotime($menue_datum. ' + {$ts3} hours'));

先修正时间差值计算逻辑

你当前计算$ts3的方式是错误的:直接用格式化后的时间字符串相减,本质是把字符串转成数字后运算(比如"14:00:00"会被转成14),如果遇到跨天的情况(比如本地是凌晨1点,GMT是前一天23点),结果会完全错误。正确的计算方式应该是:

$tz = 'Europe/Berlin';
$tz_obj = new DateTimeZone($tz);
// 方式1:通过时间戳计算差值
$local_time = new DateTime("now", $tz_obj);
$utc_time = new DateTime("now", new DateTimeZone('UTC'));
$ts3 = ($local_time->getTimestamp() - $utc_time->getTimestamp()) / 3600;

// 方式2:直接获取时区偏移(更高效)
$ts3 = $tz_obj->getOffset(new DateTime()) / 3600;

正确插入变量的两种写法

你尝试的写法问题在于:单引号包裹的字符串里,{$ts3}不会被解析成变量值,而是直接当作字符串处理。可以用以下两种正确写法:

  1. 字符串拼接方式
$newDate = date('Y-m-d H:i:s', strtotime($menue_datum . ' + ' . $ts3 . ' hours'));
  1. 双引号解析变量方式
    如果用双引号包裹整个strtotime的参数,变量会自动被解析:
$newDate = date('Y-m-d H:i:s', strtotime("$menue_datum + $ts3 hours"));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:45:11