Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将UTC时间转换为本地时间_Php_Datetime_Timezone - Fatal编程技术网

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

PHP将UTC时间转换为本地时间,php,datetime,timezone,Php,Datetime,Timezone,我从服务器获取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 .' U

我从服务器获取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;

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

只需使用
日期时区
,例如

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

之前使用函数,然后再设置UTC
欧洲/里斯本
时区


尝试并根据时区设置日期

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 
date\u default\u timezone\u set('asia/kolkata');
$utc=“2014-05-29T04:54:30.934Z”;
$time=strottime($utc);
$dateInLocal=日期(“Y-m-d H:i:s”,$time);
echo$dateInLocal//2014-05-29 10:24:30
回声“
”; 日期默认时区设置(“美国/芝加哥”); $time=strottime($utc.'utc'); $dateInLocal=日期(“Y-m-d H:i:s”,$time); echo$dateInLocal//2014-05-28 23:54:30
您的代码无法工作的原因很可能是因为您的服务器处于UTC时间。因此,服务器的本地时间是UTC

解决方案#1 一种可能的解决方案是在服务器端执行以下操作,并将历元整数传递给浏览器:

$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc); //returns an integer epoch time: 1401339270
然后使用JavaScript将历元整数转换为用户的本地时间(浏览器知道用户的时区)

解决方案#2 您可以让浏览器向您发送用户的时区。然后可以使用此信息计算日期字符串服务器端而不是浏览器端。请参阅此处的更多信息:


这将为您提供用户的偏移(-7小时)。您可以通过查看此处来使用此信息设置时区:

只需将UTC时间发送到浏览器。使用JavaScript使用
Date
对象或使用进行解析,然后将其输出为文本


通过在客户端JavaScript中执行,您不需要知道用户的时区。浏览器将对此负责。

如果这不是通过用户配置文件设置来完成的,那么使用javascript时间库(如moment.js()来解决此问题可能会更容易、更简单(以UTC格式发送所有日期/时间,然后在客户端转换它们)

Javascript(我确信这可以在不创建两个瞬间对象的情况下实现(在空闲时修复)

服务器端解析的php示例(仅使用其中一种解决方案,两者一起将在客户端产生错误的时间)

调用函数 cnvt_usrTime_to_UTC($dt_start_time_format,'UTC')

调用函数

cnvt_UTC_to_usrTime($value_edit['dt_start_time'],Asia/Kolkata);
$savedtime='2019-05-25 00:01:13';//现在是美国/芝加哥时间
$servertime=ini_get('date.timezone');
$time=strottime($savedtime.$servertime);
$dateInLocal=日期(“Y-m-d H:i:s”,$time);
echo$dateInLocal;
根据本地时区显示值

2019-05-25 10:31:13//这是亚洲/加尔各答时间
您的两个案例对我来说都很好..感谢您的快速回复。我如何知道用户的“亚洲/加尔各答”时区。用户可能在世界任何地方。这是一个静态值吗?@Dibish我假设您知道所需的时区。有关从客户处获取信息,请参阅。谢谢更多的帮助解决方案#2是不明智的,因为您只能直接从JavaScript获取当前时区偏移量。您可以使用猜测时区,但这只能让您了解到目前为止。解决方案#1更好,但是。@MattJohnson我想您可以从
new Date()提取时区
返回
2016年10月25日星期二12:43:28 GMT-0400(EDT)
,但如果我记得的话,EDT/EST不是很独特(世界上有很多时区可能与3个字符的时区表示重叠)。也许偏移量和3个字符表示的组合可能会起作用。不幸的是,括号中的值是特定于实现的,并且在不同平台之间差异很大。它并不总是缩写,是的-缩写通常是不明确的(例如,有5个不同的CST)。您需要使用
欢迎使用堆栈溢出!仅使用代码的答案没有特别的帮助。请添加一些关于此代码如何解决问题的说明。
#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_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);
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;