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

Laravel中如何将用户本地时区时间转换为UTC时间?

问题分析与解决

你的代码存在两个关键问题,导致时间转换未达到预期效果:

  1. 变量名错误:你创建的DateTime对象是$utcTime,但后续调用setTimeZone时误用了未定义的$utcTime1,这会引发错误(若错误未开启显示,会导致逻辑异常)。
  2. 未指定原始时间的时区:使用new DateTime($defaultTime)时,PHP会默认用服务器时区解析时间字符串,而非用户的America/Denver时区。这意味着你实际是在转换服务器时区的时间到UTC,而非用户当地时间。

修正后的代码

$defaultTime = request('submitted-time-stamp'); // 示例输入:2022-12-21 12:01:01
$defaultTZ = $user->time_zone; // 示例值:America/Denver

// 1. 创建DateTime对象时指定用户时区,明确该时间为用户当地时间
$localTime = new DateTime($defaultTime, new DateTimeZone($defaultTZ));
// 2. 将时间转换为UTC时区
$localTime->setTimeZone(new DateTimeZone('UTC'));
// 3. 格式化输出目标格式
$formattedTime = $localTime->format("Y-m-d H:i:s");

echo $formattedTime; // 输出:2022-12-21 19:01:01

Laravel 简化写法(利用Carbon)

Laravel默认集成了Carbon库,可以更简洁地处理时区转换:

use Carbon\Carbon;

$formattedTime = Carbon::createFromFormat('Y-m-d H:i:s', $defaultTime, $defaultTZ)
    ->setTimezone('UTC')
    ->format('Y-m-d H:i:s');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:55:16