首页 > 解决方案 > 时区转换在 PHP 中多花一小时

问题描述

我有以下脚本:

$data = array(
  'fromTimezone'          => 'Asia/Kolkata',
  'toTimezone'            => 'America/New_York',
  'dateTime'              => '2020-02-06 08:34:11',
  'dateTimeFormat'        => 'Y-m-d H:i:s'
);

$fromTimezone           = $data['fromTimezone'];
$toTimezone             = $data['toTimezone'];
$dateTime               = $data['dateTime'];
$dateTimeFormat         = $data['dateTimeFormat'];


$fromZoneDateTime    = new DateTime($dateTime, new DateTimeZone($fromTimezone));

// synchronizing with the to-Timezone
$fromZoneDateTime->setTimezone(new DateTimeZone($toTimezone));

$returnDateTime    = date($dateTimeFormat, strtotime($fromZoneDateTime->format('Y-m-d H:i:s')));
echo $returnDateTime;

这是给我2020-02-05 22:04:11

但是当我在实时应用程序中检查时区转换的时间时。像时区转换器一样,我将数据作为2020-02-05 23:04:11.

在此处输入图像描述

为什么会出现这种不匹配?我该如何克服呢?

标签: phptimezone

解决方案


您引用的网站向您显示了您当地时区(可能是印度)与当前日期的纽约时间之间的差异。

您可以使用其他网站来验证您的假设,例如 timeanddate.com,它显示了相关日期的正确结果,与您的代码输出一致。

截屏

至于为什么,请理解,虽然印度固定为 UTC+05:30 (IST),但纽约在 UTC-05:00 (EST) 和 UTC-04:00 (EDT) 之间交替。有关这方面的更多信息,请阅读时区标签 wiki,尤其是“时区!= 偏移量”部分。您可能还想查看DST 标签 wiki


推荐阅读