Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP设置时区时区转换问题-由于BST(GMT+;1)而导致的特性_Php_Mysql_Datetime - Fatal编程技术网

PHP设置时区时区转换问题-由于BST(GMT+;1)而导致的特性

PHP设置时区时区转换问题-由于BST(GMT+;1)而导致的特性,php,mysql,datetime,Php,Mysql,Datetime,我的mysql数据库中存储了一个datetime字段,其中包含一个事件的时间,设置为UK time。在下面使用的示例中,此时间为09:00 我试图在美国西海岸和东海岸时区显示这一时间 我相信我正确地使用了php DateTime“setTimeZone”函数,但是返回的结果是两个时区都有一个小时的时间 $online->getTimeByZone('America/Los_Angeles'); // Returns 02:00 $online->getTimeByZone('Amer

我的mysql数据库中存储了一个datetime字段,其中包含一个事件的时间,设置为UK time。在下面使用的示例中,此时间为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');

}
我假设时差与英国遵守夏令时有关,但我在启动带有“Europe/London”的DateTime对象时,会考虑到这一点


有什么想法吗?

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

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

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

三月份还有两个星期,北美会提前调整时钟,所以会再次出现4小时的偏移,而不是5小时


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

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

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

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

三月份还有两个星期,北美会提前调整时钟,所以会再次出现4小时的偏移,而不是5小时


(同样的情况当然也适用于美国/洛杉矶时区,在这三周内,该时区距离我们6小时而不是7小时。)

您希望在哪个时区使用时间?@Hackit数据库正在以“欧洲/伦敦”时间存储值。我希望转换成美国东海岸(“美国/纽约”)和美国西海岸(“美国/洛杉矶”)时报,并将其输出。这是可行的-但我的函数输出的时间在凌晨2点和5点不正确,而它们应该是凌晨1点和4点。实际上,在2017年10月30日,伦敦不在DST,而和都在DST(都在11月结束)。因此,在10月30日,伦敦的上午9点相当于洛杉矶的凌晨2点和纽约的凌晨5点(由于所有的DST规则):您希望在哪个时区中设置时间?@Hackit数据库正在以“欧洲/伦敦”时间存储值。我希望转换成美国东海岸(“美国/纽约”)和美国西海岸(“美国/洛杉矶”)时报,并将其输出。这是可行的-但我的函数输出的时间在凌晨2点和5点不正确,而它们应该是凌晨1点和4点。实际上,在2017年10月30日,伦敦不在DST,而和都在DST(都在11月结束)。因此,在10月30日,伦敦的上午9点等于洛杉矶的凌晨2点和纽约的凌晨5点(由于所有这些DST规则):