在php中获取服务器时间 - 时区问题

时间:2010-08-29 14:42:33

标签: php timezone

在shell上,我的服务器时间是(bash中的简单date): Sun Aug 29 10:37:12 EDT 2010

当我运行代码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文件没有设置时区,我不想更改任何内容 - 因为我不知道它会对在此服务器上运行的其他网站产生什么影响。

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

4 个答案:

答案 0 :(得分:14)

根据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是默认值,因此这可能是一个很好的起点。

答案 1 :(得分:2)

服务器应始终php.ini文件中指定时区。如果不是这种情况,PHP 5.3甚至会引发注意事项如果您尝试构建对象而未明确指定时区(使用DateTime对象)或具有默认值(通过任何一个),则DateTimezone扩展将引发异常date.timezonedate_default_timezone_set)。

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

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

找到