如何在PHP中将时间从一个时区转换为另一个时区

时间:2018-01-06 13:38:31

标签: php datetime timezone

我有一个代码见下文。时间16:17的时区为Europe/Vilnius。我的目标是在$tz2 = 'Africa/Dakar'时区应用时区16:17并获得Africa/Dakar时间。

$tz1 = 'Europe/Vilnius';
$tz2 = 'Africa/Dakar';
$a='16';
$b='17';
$match_time = date("H:i", strtotime($a.":".$b));
$dt1 = new DateTime($match_time, $tz1);
$dt2 = new DateTime($match_time, $tz2);

echo "match date".$match_time;
echo "dt1".$dt1;
echo "dt2".$dt2;

我尝试了很多方法来做到这一点。现在这段代码给了我一个错误:

  

FATAL ERROR未捕获错误:在/home4/phptest/public_html/code.php70(5)中调用字符串上的成员函数format():eval()'d code:8堆栈跟踪:#0 / home4 / phptest /public_html/code.php70(5):在第8行抛出的eval()#1 {main}

我的问题是如何修复代码以获得结果,这是进行此类转换的便捷方式吗?

3 个答案:

答案 0 :(得分:2)

date_default_timezone_set('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo $datetime->format('Y-m-d H:i:s') . "\n";
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo $datetime->format('Y-m-d H:i:s');

答案 1 :(得分:0)

参数的类型是DateTimeZoneDateTime。你正在传递一个字符串。

你可以这样做:

$tz1 = 'Europe/Vilnius';
$tz2 = 'Africa/Dakar';
$a='16';
$b='17';
$match_time = date("H:i", strtotime($a.":".$b));
$dt1 = new DateTime($match_time, new DateTimeZone($tz1));
$dt2 = new DateTime($match_time, new DateTimeZone($tz2));

echo "match date".$match_time;
echo "dt1".$dt1->format('Y-m-d H:i:s');
echo "dt2".$dt2->format('Y-m-d H:i:s');

要回显DateTime,您可以使用format

答案 2 :(得分:0)

你不能只在第二个参数中将时区作为字符串传递。您必须使用时区名称作为构造函数参数创建DateTimeZone类的新实例。例如:

<?php
$dt = new DateTime("16:17", new DateTimeZone('Europe/Warsaw'));