当前位置: 首页 > 知识库问答 >
问题:

PHP时区Etc/GMT 5变为-0500?

欧镜
2023-03-14

与许多Web应用程序一样,我正在开发的应用程序需要为我们亲爱的最终用户转换时区。然而,当我在PHP 5.3中使用Carbon/DateTime时,我发现这很奇怪:

$date_str = '2014-04-15 12:00:00'; // from database

$date = new DateTime($date_str,new DateTimeZone('GMT'));
$date->setTimezone(new DateTimeZone('Etc/GMT+5'));

echo $date->format('Y-m-d H:i:s O'); // 2014-04-15 07:00:00 -0500

我将$date的时区设置为GMT 5,但是当我格式化$date时,它变成-0500,而不是预期的0500

同样,如果我将其设置为负数,即Etc/GMT-5,则格式显示0500而不是预期的-0500

有人能开导吗?

我能够在PHP5.3.3、5.3.13、5.3.28中复制这个问题。认为这是一个PHP特定的版本错误。一个bug或特性?

共有2个答案

史旺
2023-03-14

我希望对你有帮助

移除

etc/gmt

带gtm偏移量

$date_str = '2014-04-15 12:00:00'; // from database

$date = new DateTime($date_str,new DateTimeZone('GMT'));
$date->setTimezone(new DateTimeZone('GMT+5'));

echo $date->format('Y-m-d H:i:s O'); 

输出2014-04-15 17:00:00 0500

郭麒
2023-03-14

这是一个有趣的案例。Etc/GMT时区的符号颠倒。

来自维基百科关于tz数据库的文章:

为了符合POSIX风格,那些以Etc/GMT开头的区域名称的符号与大多数人预期的相反。在这种风格中,格林尼治标准时间以西的区域有一个正号,以东的区域有一个负号(例如Etc/GMT-14比格林尼治标准时间提前14小时/以东)

PHP手册还警告您不要使用此时区:

警告:请不要使用此处列出的任何时区(除了UTC),它们仅出于向下兼容的原因而存在。

使用特定的时区标识符,而不是使用偏移量。要获得有效时区的列表,可以使用print\r(DateTimeZone::listIdentifiers(DateTimeZone::ALL))

 类似资料:
  • 问题内容: 苹果使用Etc / GMT时区的原因是什么,当苹果从App Store返回收据以进行自动续订时,该理由是什么。 Etc / GMT时区到底是什么时间?Java SDK是否了解该时区?还是我必须使用其他第三方库(如Joda- Time) ? 问题答案: Etc / GMT 与UTC或GMT 并不 完全相同。仅当偏移量为0时,它们表示时间上的同一时刻。在所有其他情况下,它们是完全不同的。

  • 我正在Debian8上使用PHP5.6.17。在建立owncloud之后,我注意到owncloud(而不是apache)自写的日志有错误的时区。 我调查了一下,好像,那一行: 这不关心任何时区设置。而不是欧洲/柏林(+1/+2)的时间,我总是得到UTC的时间。 在中,我设置了并且系统时间(debian)也是正确的。 即使运行如下所示,也会得到相同的输出(UTC): 对这个问题有什么想法吗?

  • 问题内容: 我正在尝试将时区系统集成到我的应用程序中,直到现在为止,我一直在努力避免制作时区感知的应用程序- 但是它是一项强制性要求,因此别无选择。TimeZones只是在我头上。我已经在PHP.net和其他站点(包括但不限于SO)上阅读了多个主题。但是我永远也无法掌握。 因此,我想知道是否有人可以在这里帮助我:(我想要做的是在我的应用程序中使用偏好选项,以允许用户从选择菜单中选择自己的时区,但是

  • etc

    存放 Neutron 服务运行相关的配置文件。

  • 问题内容: 如何将UTC中当前的时区更改为GMT +1,正确的行是什么,我是否只需在phpMyAdmin SQL执行中输入它? 我的房东只是给了我这个链接http://dev.mysql.com/doc/refman/5.1/en/time-zone- support.html 而关闭了,所以我有点迷失了感谢 问题答案: 发出命令: (或GMT + 1所在的任何时区。:http : //www.p

  • 这两个文件是tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问。这两个配置文件的格式如下: #服务进程名:主机列表:当规则匹配时可选的命令操作 server_name:hosts-list[:command] /etc/hosts.allow控制可以访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP。如果两个文件的配置有冲突,以/etc/hosts.