PHP将UTC时间转换为本地时间

Dib*_*ish 9 php timezone datetime

我从我的服务器获得UTC时间,如下面的格式,我的要求是将UTC时间转换为本地时间.因此,用户可以根据他们的时区在浏览器上看到用户友好的时间.请帮我解决这个问题.谢谢

$utc = "2014-05-29T04:54:30.934Z"
Run Code Online (Sandbox Code Playgroud)

我尝试了一些方法但不适用于我的情况

第一

$time = strtotime($utc);
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal;
Run Code Online (Sandbox Code Playgroud)

第二

$time = strtotime($utc .' UTC');
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal;
Run Code Online (Sandbox Code Playgroud)

Phi*_*hil 13

只需使用DateTimeZone,例如

$dt = new DateTime($utc);
$tz = new DateTimeZone('Asia/Kolkata'); // or whatever zone you're after

$dt->setTimezone($tz);
echo $dt->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

演示~ http://ideone.com/fkM4ct


Mar*_*cny 12

您的代码无法正常工作的原因很可能是因为您的服务器处于UTC时间.所以服务器的本地时间 UTC.

解决方案#1

一个可能的解决方案是执行以下服务器端并将epoch整数传递给浏览器:

$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc); //returns an integer epoch time: 1401339270
Run Code Online (Sandbox Code Playgroud)

然后使用JavaScript将纪元整数转换为用户的本地时间(浏览器知道用户的时区).

解决方案#2

您可以让浏览器向您发送用户的时区.然后,您可以使用此信息来计算日期字符串服务器端而不是浏览器端.在此处查看更多信息:https://stackoverflow.com/a/5607444/276949

这将为您提供用户的偏移量(-7小时).您可以使用此信息通过查看此处来设置时区:将UTC偏移量转换为时区或日期