Laravel中如何将用户本地时区时间转换为UTC时间?
问题分析与解决
你的代码存在两个关键问题,导致时间转换未达到预期效果:
- 变量名错误:你创建的DateTime对象是
$utcTime,但后续调用setTimeZone时误用了未定义的$utcTime1,这会引发错误(若错误未开启显示,会导致逻辑异常)。 - 未指定原始时间的时区:使用
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
相关产品推荐
相关产品推荐

