我从服务器获取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;
只需使用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
您的代码不工作的原因很可能是因为您的服务器在UTC时间。因此服务器的本地时间是UTC。
解决方案#1
一个潜在的解决方案是在服务器端执行以下操作,并将epoch整数传递给浏览器:
$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc); //returns an integer epoch time: 1401339270
然后使用JavaScript将epoch整数转换为用户的本地时间(浏览器知道用户的时区(。
解决方案#2
您可以让浏览器向您发送用户的时区。然后,您可以使用这些信息来计算日期字符串服务器端,而不是浏览器端。点击此处查看更多信息:https://stackoverflow.com/a/5607444/276949
这将为您提供用户的偏移量(-7小时(。您可以使用此信息设置时区,方法是:将UTC偏移量转换为时区或日期
如果这不是通过用户配置文件设置完成的,那么使用javascript时间库(例如moment.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);
}
在此之前使用函数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);
?>
只需将UTC时间发送到浏览器。使用JavaScript用Date
对象或moment.js解析它,然后将其输出为文本。
通过在客户端JavaScript中执行此操作,您不需要知道用户的时区。浏览器将对此负责。
#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((并根据时区设置日期
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
$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
$utc_date = '2021-10-07T11:01:07';
//local timezone or ant timezone you want
$timezone = 'America/Los_Angeles';
$timestamp = strtotime($utc_date);
$date = new DateTime();
$date->setTimestamp($timestamp);
$date->setTimezone(new DateTimeZone($timezone));
echo $date->format('m-d-Y g:i A') . "n";
protected function get_timemillizone_date($timezone_id)
{
date_default_timezone_set($timezone_id);
$availdate = date('Y-m-d');
$stamp = strtotime($availdate); // get current date timestamp
$currenttimemill = $stamp * 1000;
return $currenttimemill;
}
$timezone_id = "Asia/Kolkata";
$DATA = $this->get_timemillizone_date($timezone_id);
echo $DATA;