php - 在 PHP 中将 DateTime 字符串转换为不同的时区

标签 php datetime timezone

好的,我有以下代码

$from = "Asia/Manila";
$to = "UTC";
$org_time = new DateTime("2012-05-15 10:50:00");
$org_time = $org_time->format("Y-m-d H:i:s");
$conv_time = NULL;

$userTimezone = new DateTimeZone($from);
$gmtTimezone = new DateTimeZone($to);
$myDateTime = new DateTime($org_time, $gmtTimezone);
$offset = $userTimezone->getOffset($myDateTime);
$conv_time = date('Y-m-d H:i:s', $myDateTime->format('U') + $offset);
echo $conv_time;

使用这段代码,我想将 2012-05-15 10:50:00 转换为 UTC 和 -8 时区(我使用的是 America/Vancouver),但它给了我一个奇怪的结果

Asia/Manila > UTC  
2012-05-15 19:50:00 = the correct is 2012-05-15 02:50

和美国/温哥华

Asia/Manila > America/Vancouver 
2012-05-16 02:50:00 = the correct is 2012-05-14 19:50

我哪里错了?

最佳答案

你让事情变得太难了。要在时区之间转换,您需要做的就是创建一个具有正确源时区的 DateTime 对象,然后通过 setTimeZone() 设置目标时区。

$src_dt = '2012-05-15 10:50:00';
$src_tz =  new DateTimeZone('Asia/Manila');
$dest_tz = new DateTimeZone('America/Vancouver');

$dt = new DateTime($src_dt, $src_tz);
$dt->setTimeZone($dest_tz);

$dest_dt = $dt->format('Y-m-d H:i:s');

关于php - 在 PHP 中将 DateTime 字符串转换为不同的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10593576/

相关文章:

php - 我如何强制 Joomla 更新用户 session

C# TimeZoneInfo 将 GMT 时区名称转换为系统时区

PHP 我的时区一周的第一天不正确

ruby-on-rails - 在给定 UTC 偏移量和 DST 的情况下自动检测 Rails 中的时区

php - 安装 PHP PEAR 代码嗅探器 (mac)

php - 如何阻止PHP输出缓冲区超过内存限制?

php - 数据库结构 : Finding and marking similar entries

Java SimpleDateFormat 转换分钟报错

python - 在 Python 中遍历一系列日期

mysql - 如何插入 YYYY-MM-DDThh :mm:ss±hh:mm date in mysql with timezone?