PHP convert UTC time to local time

倾然丶 夕夏残阳落幕 提交于 2020-05-10 04:24:47

问题


Am getting a UTC time from my server like the following format, my requirement is to convert the UTC time to local time. So users can see a user friendly time on their browser based on their timezone. Please help me to solve this issue. Thank you

$utc = "2014-05-29T04:54:30.934Z"

I have tried some methods but not working in my case

First

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

Second

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

回答1:


The reason your code isn't working is most likely because your server is in UTC time. So the local time of the server is UTC.

Solution #1

One potential solution is to do the following server side and pass the epoch integer to the browser:

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

Then use JavaScript to convert the epoch integer to the user's local time (the browser knows the user's timezone).

Solution #2

You can get the browser to send you the user's timezone. Then you can use this information to calculate the date string server side instead of browser side. See more here: https://stackoverflow.com/a/5607444/276949

This will give you the user's offset (-7 hours). You can use this information to set the timezone by looking here: Convert UTC offset to timezone or date




回答2:


Simply use a DateTimeZone, eg

$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');

Demo ~ http://ideone.com/fkM4ct




回答3:


If this is not done via a user profile setting, it is probably easier and simpler to use a javascript time library eg. moment.js (http://momentjs.com/) to solve this problem (send all date/times in UTC and then convert them on the client end).

Javascript eg. (I am sure this can be achieved without creating two moment objects (fix that at your leisure).

function utcToLocalTime(utcTimeString){
    var theTime  = moment.utc(utcTimeString).toDate(); // moment date object in local time
    var localTime = moment(theTime).format('YYYY-MM-DD HH:mm'); //format the moment time object to string

    return localTime;
}

php example for server side resolution (only use one of these solutions, both together will produce an incorrect time on the client end)

/**
 * @param $dateTimeUTC
 * @param string $timeZone
 * @param string $dateFormat
 * @return string
 *
 * epoch to datetime (utc/gmt)::
 * gmdate('Y-m-d H:i:s', $epoch);
 */
function dateToTimezone($timeZone = 'UTC', $dateTimeUTC = null, $dateFormat = 'Y-m-d H:i:s'){

    $dateTimeUTC = $dateTimeUTC ? $dateTimeUTC : date("Y-m-d H:i:s");

    $date = new DateTime($dateTimeUTC, new DateTimeZone('UTC'));
    $date->setTimeZone(new DateTimeZone($timeZone));

    return $date->format($dateFormat);
}



回答4:


Just send the UTC time to the browser. Use JavaScript to parse it with a Date object, or with moment.js, then output it as text.

By doing it in client-side JavaScript, you don't need to be aware of the user's time zone. The browser will be responsible for that instead.




回答5:


#cnvt_usrTime_to_UTC 0

function cnvt_usrTime_to_UTC($dt_start_time_formate,$UTC_TimeZone){

  $LocalTime_start_time = new DateTime( $dt_start_time_formate );
  $tz_start = new DateTimeZone( $UTC_TimeZone );
  $LocalTime_start_time->setTimezone( $tz_start );
  $array_start_time = (array) $LocalTime_start_time;

  return $UTC_Time_Start_Time = $array_start_time['date'];
}

call the function cnvt_usrTime_to_UTC($dt_start_time_formate,'UTC');

#cnvt_UTC_to_usrTime
function cnvt_UTC_to_usrTime($Date_Time,$User_time_Zone){

    date_default_timezone_set('UTC');

    $LocalTime_start_time = new DateTime( $Date_Time );
    $tz_start = new DateTimeZone( $User_time_Zone );
    $LocalTime_start_time->setTimezone( $tz_start );
    $start_date_time = (array) $LocalTime_start_time;

    return $StartDateTime = $start_date_time['date'];
}

call the function

cnvt_UTC_to_usrTime($value_edit['dt_start_time'],Asia/Kolkata);



回答6:


Use function date_default_timezone_set before there you want to local time after that again setup UTC Europe/Lisbon timezone List of Supported Timezones

  <?php

$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc);
echo "<br/>Defualt UTC/server time".$dateInLocal = date("Y-m-d H:i:s", $time);

//your local time zone put here
date_default_timezone_set('Asia/Kolkata');

echo "<br/>Local time". $dateInLocal = date("Y-m-d H:i:s", $time);
?>



回答7:


try with date_default_timezone_set() and set date according timezone

date_default_timezone_set('asia/kolkata');
$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc);
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal;  //2014-05-29 10:24:30
echo '<br>';
date_default_timezone_set('America/Chicago'); 
$time = strtotime($utc .' UTC');
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal; //2014-05-28 23:54:30 



回答8:


$savedtime = '2019-05-25 00:01:13'; //this is America/Chicago time
$servertime = ini_get('date.timezone');
$time = strtotime($savedtime . $servertime);
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal;

display value according to local timezone
2019-05-25 10:31:13  // this is Asia/Kolkata time


来源:https://stackoverflow.com/questions/23926250/php-convert-utc-time-to-local-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!