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

2022-08-30 21:14:05

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

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

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

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

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


答案 1

根据 php.ini 指令手册页,如果您使用的是 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是默认值,因此这可能是一个很好的起点。


答案 2

服务器应始终在文件中指定时区。PHP 5.3 甚至会引发通知(如果不是这种情况),如果您尝试构建对象而不显式指定时区(带有对象)或具有默认时区(通过或),则扩展将引发异常。php.iniDateTimeDateTimezonedate.timezonedate_default_timezone_set

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

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

推荐