2017-05-30 49 views
1

当未提供日期时,如何将时区(如14:00:00+02:00)提供的时间更改为当地时间(结果为16:00:00)。 我已经用DateTime类试过了。但是,因为我只是搬运时间,没有日期,它并不总是提供正确的结果:使用时区格式化时区到当地时间PHP

$time = '14:00:00+02:00'; 
$datetime = new DateTime($date); 
$result = $datetime->format("H:i:s"); 
+0

$日期时间=新日期时间($日期);应该是$ datetime = new DateTime($ time); 。对? – Stanly

回答

0

您可以使用setTimezone()函数

$time = '14:00:00+02:00'; 
$datetime = new DateTime($time); 
$result = $datetime->format("H:i:s"); 
echo $result; 
echo '<br>'; 
$datetime->setTimezone(new DateTimeZone('Your_local_timezone')); // ex: UTC (+00h00) or Europe/Moscow (+4h00) 
$result = $datetime->format("H:i:s"); 
echo $result; 
+0

我试过,但它只适用于后缀是+ 01:00'\t'$ date = '14:00:00 + 01:00'; \t $ timezone; $ datetime = new DateTime($ date); $ target_timezone = new DateTimeZone('Europe/Brussels'); $ datetime-> setTimezone($ target_timezone); $ result = $ datetime-> format(“H:i:s”); \t echo $ result;'给出15:00:00,但使用+02:00给出14:00:00 – JonVH

+0

您可以使用例如'Europe/Moscow'时区(+04:00):$ datetime- > setTimezone(new DateTimeZone('Europe/Moscow')); –

0

使用日期时间的setTimezone方法。它会自动更改时间以匹配时区。

$date = new DateTo,e("2017-02-02 10:00:00", new DateTimeZone("+0200")); 
$date->setTimezone(new DateTimeZone("-0200")); 
var_dump($date->format("H:i:s")); 

会输出如下:

string '06:00:00' (length=8) 
0
$utc = new DateTimeZone("UTC"); 
$zone = new DateTimeZone("YOUR_TIME_ZONE"); 
$date = new DateTime("14:00:00+02:00", $utc); 
$date->setTimezone($zone); 
echo $date->format('Y-m-d H:i:s'); 
0

您应该具体时区,并告诉DateTime使用时区 例如:

$time = '14:00:00+02:00'; 
$datetime = DateTime::createFromFormat('H:i:s+T', $time); 
$datetime->setTimezone(new DateTimeZone('Europe/Warsaw')); 
$result = $datetime->format("H:i:s"); 

echo($result); 

使用+T在格式模式说,PHP的日期包含一个时区,在下一步你应该使用setTimezone设置你的时区。比如我设置'Europe/Warsaw',但没有发生堂妹+02:00是CEST这就是等于'Europe/Warsaw'

另一种方式是改变+02:00命名时区下面是一个例子:

$time = '14:00:00 (UTC)'; 
$datetime = new DateTime($time); 

$datetime->setTimezone(new DateTimeZone('Europe/Warsaw')); 
$result = $datetime->format("H:i:s"); 

echo($result);