PHP 通过 date() 进行的 DST 检测已逆转
PHP DST detection via date() has reversed
我们 运行 遇到了一个问题,该问题对我们托管的 AWS EC2 系统造成了严重破坏。
我们使用 date('I')(大写 i)的 PHP 命令来检测夏令时是否在运行。整个夏天它一直很开心地返回“1”。
2018 年 9 月 29 日上午 7:00 左右,它开始返回“0”,表示冬令时已更改。
这几乎发生在 10 月 29 日即将发生变化的整整一个月之前。
因此,我们现在的 UTC 时间是一小时。
由于某些原因,PHP我们的EC2认为时间切换早了一个月。
Linux 时区是:Europe/Dublin (IST, +0100)
PHP 时区通过 date_default_timezone_set('Europe/Dublin');
设置
date('I', strtotime('2018-09-29 02:00:00')) // returns "0" - which is wrong as DST is active now!
爱尔兰夏令时将于 2018 年 10 月 29 日关闭
date('I', strtotime('2018-11-29 02:00:00')) // returns "1" - which is wrong as DST is Summer time!
编辑:在我们的多个 AWS EC2 实例上确认了同样的问题。我将联系 Amazon AWS 支持并更新此线程的解决方案。
我想分享我对现有产品进行 DST 修复的经验。
$ssCurrentTimeZone = date_default_timezone_get();
$oDateTimeZone = new DateTimeZone($ssCurrentTimeZone);
$oDateTime = new DateTime("now", $oDateTimeZone);
上面 php 的示例正在处理我现有的产品。
如果你使用 new DateTime()
那么你不需要处理任何 DST 相关的东西。
希望使用这个想法可以节省您的时间。
问题已解决:https://bugs.php.net/bug.php?id=76983
显然,都柏林时区有一个基于某些历史偏移量的例外。
我还没有完全理解这背后的原因,但它从技术上解释了这个问题。
我们 运行 遇到了一个问题,该问题对我们托管的 AWS EC2 系统造成了严重破坏。 我们使用 date('I')(大写 i)的 PHP 命令来检测夏令时是否在运行。整个夏天它一直很开心地返回“1”。
2018 年 9 月 29 日上午 7:00 左右,它开始返回“0”,表示冬令时已更改。 这几乎发生在 10 月 29 日即将发生变化的整整一个月之前。
因此,我们现在的 UTC 时间是一小时。 由于某些原因,PHP我们的EC2认为时间切换早了一个月。
Linux 时区是:Europe/Dublin (IST, +0100) PHP 时区通过 date_default_timezone_set('Europe/Dublin');
设置date('I', strtotime('2018-09-29 02:00:00')) // returns "0" - which is wrong as DST is active now!
爱尔兰夏令时将于 2018 年 10 月 29 日关闭
date('I', strtotime('2018-11-29 02:00:00')) // returns "1" - which is wrong as DST is Summer time!
编辑:在我们的多个 AWS EC2 实例上确认了同样的问题。我将联系 Amazon AWS 支持并更新此线程的解决方案。
我想分享我对现有产品进行 DST 修复的经验。
$ssCurrentTimeZone = date_default_timezone_get();
$oDateTimeZone = new DateTimeZone($ssCurrentTimeZone);
$oDateTime = new DateTime("now", $oDateTimeZone);
上面 php 的示例正在处理我现有的产品。
如果你使用 new DateTime()
那么你不需要处理任何 DST 相关的东西。
希望使用这个想法可以节省您的时间。
问题已解决:https://bugs.php.net/bug.php?id=76983 显然,都柏林时区有一个基于某些历史偏移量的例外。 我还没有完全理解这背后的原因,但它从技术上解释了这个问题。