PHP setTimeZone 时区转换问题 - 由于 BST (GMT+1) 而造成的特性

标签 php mysql datetime

我的 mysql 数据库中存储了一个日期时间字段,其中包含以英国时间设置的事件的时间。在下面使用的示例中,这个时间是 09:00。

我正尝试在美国西海岸和东海岸时区显示这个时间。

我相信我正确地使用了 php DateTime 'setTimeZone' 函数 - 但是返回的结果对于两个时区来说都是一个小时

$online->getTimeByZone('America/Los_Angeles'); // Returns 02:00
$online->getTimeByZone('America/New_York'); // Returns 05:00


public function getTimeByZone($timezone = 'Europe/London') {

   $date = $this->getDateField('start_time', 'Y-m-d H:i:s'); // 2017-10-30 09:00:00 

   $datetime = new DateTime($date, new DateTimeZone('Europe/London'));
   $datetime->setTimeZone(new dateTimeZone($timezone));

   return $datetime->format('H:i');

}

我假设从时差来看这将与英国观察夏令时有关 - 但我本以为我正在使用“欧洲/伦敦”启动 DateTime 对象,这将被考虑在内。

有什么想法吗?

最佳答案

您选择了北美仍在遵守“夏令时”但英国不遵守“夏令时”时出现在小窗口中的示例日期:英国时钟在 10 月的最后一个星期日改变,但美国和加拿大时钟在 11 月的第一个星期日。

在此重叠周内,美国/纽约时间为 UTC-4(“东部夏令时”),欧洲/伦敦时间为 UTC+0(“格林威治标准时间”)。因此,“2017-10-30 09:00:00 Europe/London”确实是“2017-10-30 05:00:00 America/New_York”。

如果您选择一周前的日期,偏移量将为 UTC-4 和 UTC+1(“英国夏令时”);一周后,它们将是 UTC-5(“东部标准时间”)和 UTC+0;因此在一年中的大部分时间里,您认为预期的差异是 5 小时是正确的。

3 月还有两周,北美会提前更改时钟,因此同样会有 4 小时的偏移,而不是 5 小时。

(当然这同样适用于美国/洛杉矶时区,在这三周内相隔 6 小时而不是 7 小时。)

关于PHP setTimeZone 时区转换问题 - 由于 BST (GMT+1) 而造成的特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46814633/

相关文章:

php - 如何通过递归重新分配值?

php - Laravel 5 - 用户个人资料图片

javascript - ER_ACCESS_DENIED_ERROR CloudSQL

mysql - 表大小会影响 INSERT 性能吗?

python - Python 中的动态单行打印(时间?)

javascript - 在javascript中,如何获取new Date(2017,05,31).toISOString()的UTC格式的时区值?

javascript - 如何将PHP的curl命令转换为JS

php - CakePHP shell cronjobs 在更改密码后停止工作

php - 用php处理大文件到数据库

c# - DateTime.TryParseExact 不在 out 参数中返回值?