php - 时区转换在 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
.
为什么会出现这种不匹配?我该如何克服呢?
解决方案
您引用的网站向您显示了您当地时区(可能是印度)与当前日期的纽约时间之间的差异。
您可以使用其他网站来验证您的假设,例如 timeanddate.com,它显示了相关日期的正确结果,与您的代码输出一致。
至于为什么,请理解,虽然印度固定为 UTC+05:30 (IST),但纽约在 UTC-05:00 (EST) 和 UTC-04:00 (EDT) 之间交替。有关这方面的更多信息,请阅读时区标签 wiki,尤其是“时区!= 偏移量”部分。您可能还想查看DST 标签 wiki。