我的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');
}
我假设从小时差异来看,这将与英国观察夏令时有关 - 但我原本预料到我会用欧洲/伦敦'欧洲/伦敦'这是要考虑的因素。
有什么想法吗?
答案 0 :(得分:3)
当北美仍在观察“夏令时”时,您选择了小窗口中的示例日期,但英国没有观察到“夏令时”:英国时钟在10月的最后一个星期日发生变化,但是美国11月的第一个星期天加拿大钟表。
在此重叠周期间,America / New_York时间为UTC-4(“东部夏令时”),欧洲/伦敦时间为UTC + 0(“格林威治标准时间”)。因此,“2017-10-30 09:00:00欧洲/伦敦”确实是“2017-10-30 05:00:00 America / New_York”。
如果您提前一周选择日期,则抵消将为UTC-4和UTC + 1(“英国夏令时”);一周后,它们将是UTC-5(“东部标准时间”)和UTC + 0;因此,在一年中的大部分时间里,你认为预期的差异是5小时是正确的。
3月还有两个星期,北美更早地改变它的时钟,所以再次有4小时的偏移,而不是5。
(当然同样适用于America / Los_Angeles时区,在这三个星期内,这个时区将是6而不是7小时。)