【发布时间】:2014-12-14 17:15:09
【问题描述】:
我无法从 PHP DateTimeZone 和基础数据库中获取 UTC 偏移信息。我对每个 DT/ST 对都很接近,但通常少一小时 (DT) 的时区不是。
例如(source):
东部夏令时间 (EDT),当观察夏令时(春季/夏季)时,比协调世界时 (UTC−04:00) 晚 4 小时)。
东部标准时间 (EST) 观察标准时间(秋季/冬季)时比协调世界时 (UTC−05:00强>)。
到目前为止,我在以下代码中获得了 UTC 偏移量(在 DateTimeZone::getOffset 中,它是针对 GMT 说的,但我认为这是相同的):
$zones = ['EDT', 'EST'];
foreach ($zones as $zone) {
// get offset
$timezone = new DateTimeZone($zone);
$offset = $timezone->getOffset(new DateTime(null, $timezone));
printf("%s (%s) %s\n", $zone, $timezone->getName(), format_offset($offset));
}
示例输出(full example,我使用 PHP 5.6.1RC1):
EDT (EDT) -0500
EST (EST) -0500
这两个时区实际上是典型的,我也想和其他时区一起做,但是我不想硬编码偏移量,而是想用 PHP 的 DateTimeZone 来解决这个问题。
当我看到output across multiple PHP versions 时,我可能会在这里遇到一个错误,看起来 HHVM 通过转置它没有这个问题:
Output for hhvm-3.2.0 - 3.3.0
EDT (America/New_York) -0400
EST (EST) -0500
Output for 5.5.10 - 5.6.2, php7@20140507 - 20141001
EDT (EDT) -0500
EST (EST) -0500
Output for 5.2.0 - 5.5.9
EDT (America/New_York) -0400
EST (America/New_York) -0400
有没有跨PHP版本兼容的方式?通常不会对DateTimeZone 进行那么深的摆弄,到目前为止我的印象是它会很好用。
【问题讨论】:
-
不确定这是否会有所帮助,但可以确定是否正在应用 DST:6155224/php-daylight-saving-time-detection
-
@RyanVincent:是的,我认为这是相关的。问题似乎是 EST 和 EDT 不是 PHP 使用的时区数据库中的时区。他们也不会抛出异常,所以最后我还是需要保留一个列表。
标签: php datetime timezone utc timezone-offset