PHP преобразование времени UTC в местное время
Я получаю время UTC с моего сервера, как в следующем формате, мое требование заключается в преобразовании времени UTC в местное время. Таким образом, пользователи могут видеть удобное время в своем браузере на основе своего часового пояса. Пожалуйста, помогите мне решить эту проблему. Спасибо
$utc = "2014-05-29T04:54:30.934Z"
Я пробовал некоторые методы, но не работает в моем случае
первый
$time = strtotime($utc);
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal;
второй
$time = strtotime($utc .' UTC');
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal;
7 ответов
причина ваш код не работает, скорее всего потому, что ваш сервер по времени UTC. Так что локальное время сервера и UTC.
Решение № 1
одно потенциальное решение-сделать следующую сторону сервера и передать целое число эпохи в браузер:
$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc); //returns an integer epoch time: 1401339270
затем используйте JavaScript для преобразования целого числа эпохи в локальное время пользователя (браузер знает часовой пояс пользователя).
решение № 2
вы можете получить браузер, чтобы отправить вам часовой пояс пользователя. Затем вы можете использовать эту информацию для вычисления строки даты на стороне сервера, а не на стороне браузера. Подробнее здесь:https://stackoverflow.com/a/5607444/276949
Это даст вам смещение пользователя (-7 часов). Вы можете использовать эту информацию для установки часового пояса, посмотрев здесь:преобразование смещения UTC в часовой пояс или дату
просто использовать 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');
демо ~ http://ideone.com/fkM4ct
Если это не делается с помощью настройки профиля пользователя, вероятно, проще и проще использовать библиотеку времени javascript, например. момент.js (http://momentjs.com/) для решения этой проблемы (отправьте все даты/времена в UTC, а затем преобразуйте их на клиентском конце).
Javascript например. (Я уверен, что это может быть достигнуто без создания двух объектов момента (исправьте это на досуге).
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 для разрешения на стороне сервера (используйте только одно из этих решений, оба вместе произведут неправильное время на клиентском конце)
/**
* @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);
}
#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'];
}
вызов функции 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'];
}
вызов функции
cnvt_UTC_to_usrTime($value_edit['dt_start_time'],Asia/Kolkata);
использование функции date_default_timezone_set
перед этим вы хотите, чтобы местное время после этого снова настроить UTC Europe/Lisbon
часовой пояс
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);
?>
попробовать для меня() и даты по часовому поясу
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