【问题标题】:get server time in php - timezone issues在 php 中获取服务器时间 - 时区问题
【发布时间】:2023-04-03 13:44:01
【问题描述】:

在 shell 上,我的服务器时间是(简单的date bash): 2010 年 8 月 29 日星期日 10:37:12 EDT

当我运行代码 php -r "echo date('Y-m-d H:i:s');" 时,我得到:2010-08-29 10:37:10

但是当我执行一个具有echo date('Y-m-d H:i:s'); 的 php 脚本时,我得到了不同的时间——因为 php 认为时区是 UTC(服务器时间是 EDT)。

我的 php.ini 文件没有设置时区,我不想更改任何内容 - 因为我不知道它会对在此服务器上运行的其他站点产生什么影响。

有没有一种简单的方法可以在为服务器设置的时区获取服务器时间?

【问题讨论】:

    标签: php timezone


    【解决方案1】:

    服务器应始终php.ini 文件中指定时区。如果不是这种情况,PHP 5.3 甚至会发出通知,如果您尝试构建对象而不明确指定时区(使用 DateTimezone 对象)或具有默认时区(通过 date.timezonedate_default_timezone_set)。

    根据您的描述,最可能的情况是:

    • 两种情况下使用了不同的 php.ini 文件。在第一种情况下,没有指定默认时区,因此 PHP 尝试从机器的系统范围的时区推断一个。
    • (第二个)脚本调用date_default_timezone_set('UTC') 或等效项。

    【讨论】:

      【解决方案2】:

      根据php.ini directives 手册页,如果您使用的是 5.3 之前的版本,则默认情况下不会设置时区。然后,如果您查看date_default_timezone_get 的页面,它使用以下顺序获取时区:

      * Reading the timezone set using the date_default_timezone_set() function (if any)
      * Reading the TZ environment variable (if non empty) (Prior to PHP 5.3.0)
      * Reading the value of the date.timezone ini option (if set)
      * Querying the host operating system (if supported and allowed by the OS)
      

      如果所有这些都失败,则 UTC 是默认值,所以这可能是一个很好的起点。

      【讨论】:

        【解决方案3】:

        您是否尝试过使用 date_default_timezone_set() 美国时区可以在这里找到http://www.php.net/manual/en/timezones.america.php

        【讨论】:

          【解决方案4】:

          派对迟到了,但如果你想设置时区而不编辑 php.ini,你可以在 php 代码中输入以下字符串之一:

          date_default_timezone_set('GMT');
          date_default_timezone_set('Europe/Zurich');
          date_default_timezone_set('America/New_York');
          

          【讨论】:

            猜你喜欢
            • 2016-09-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-21
            • 2014-08-17
            • 2015-09-05
            相关资源
            最近更新 更多