PHP 中的默认时区


default timezone in PHP

php的默认时区是什么?我在 php 中检查了它.ini它显示以下内容,时区留空:

[Date]
; Defines the default timezone used by the date functions
;date.timezone =
;date.default_latitude = 31.7667
;date.default_longitude = 35.2333
;date.sunrise_zenith = 90.583333
;date.sunset_zenith = 90.583333

然后我想知道如果我没有使用 date_deafult_timezone_set() 或任何其他方式显式设置,在 PHP 中操作时间时默认使用哪个时区?

PHP 7 答案

PHP (>= 5.4.0) 的现代版本使用以下步骤,直到找到默认时区:

  1. 读取使用 date_default_timezone_set() 函数设置的时区(如果有)

  2. 读取 date.timezone ini 选项的值(如果已设置)

  3. 如果上述方法均未成功,则默认时区将为 UTC。

不再使用TZ环境变量。

来源: https://www.php.net/manual/en/function.date-default-timezone-get.php

如果未指定 date.timezone 则默认为系统环境变量 TZ。您可以使用此代码检查默认值date_default_timezone_get()

更多信息可以在这里找到:http://www.php.net/manual/en/function.date-default-timezone-get.php

您必须为默认时区编写的简单代码。 即:

date_default_timezone_get()

现在如何使用:

您必须在此函数中传递时区,就像我们希望将印度时区设置为默认值一样,请参阅:

date_default_timezone_set("Asia/Kolkata"); 

现在,无论何时使用 date(),都会自动返回印度时区。

如果您想要一个例子,我会参考:如何在 php 中转换默认日期时区

您可以从实验中检查下面描述的所有内容:

如果 php

''php-fpm 在配置中有 date.时区设置 则默认时区将是相等的日期.时区

如果 php''php-fpm 的配置中没有 date.timezone,那么 php''php-fpm尝试找出主机的时区。如果成功,则默认时区将是相等的主机时区。如果他们不成功(下面的示例请查看下面),则默认时区将等于 UTC。

例子。

主机时区:

# stat /etc/localtime 
  File: /etc/localtime -> /usr/share/zoneinfo/Europe/Helsinki

php''php-fpm 时区

# php -i | grep timezone
Default timezone => Europe/Helsinki
date.timezone => no value => no value
# php-fpm7.3   -i | grep timezone
Default timezone => Europe/Helsinki
date.timezone => no value => no value
所以 php

''php-fpm 成功地确定了主机时区

下一个示例

主机时区:

# stat /etc/localtime 
   File: /etc/localtime -> /usr/share/zoneinfo/Antarctica/Casey

php''php-fpm 时区

# php -i | grep timezone
Default timezone => UTC
date.timezone => no value => no value
# php-fpm7.3   -i | grep timezone
Default timezone => UTC
date.timezone => no value => no value
php

''php-fpm 无法识别主机时区并设置 UTC 时区

下一个示例。主机时区:

# timedatectl 
               Local time: Wed 2023-06-21 00:22:59 CEST
           Universal time: Tue 2023-06-20 22:22:59 UTC
                 RTC time: n/a
                Time zone: Europe/Budapest (CEST, +0200)
System clock synchronized: yes
              NTP service: inactive
          RTC in local TZ: no

我们在配置文件中设置日期.时区

php cli config
# cat /etc/php/7.3/cli/php.ini |  grep timezone | grep -v ";"
date.timezone = "Antarctica/Casey"
 php-fpm config
# cat /etc/php/7.3/fpm/php.ini|  grep timezone | grep -v ";"
date.timezone = "Antarctica/Casey"
检查 php

''php-fpm 时区

# php -i | grep timezone
Default timezone => Antarctica/Casey
date.timezone => Antarctica/Casey => Antarctica/Casey

# php-fpm7.3   -i | grep timezone
Default timezone => Antarctica/Casey
date.timezone => Antarctica/Casey => Antarctica/Casey

所以当设置日期时区时,php''php-fpm 不关心主机时区

;date.timezone =
; This is diasable text
This is working text

明白了吗? 有了这个;在某些 ini 文件上,您可以禁用某些脚本/代码。您可以在 php 中设置时区,例如: date_default_timezone_set('Europe/London'); 和其他像欧洲/阿姆斯特丹...阅读更多关于 php 默认时区的信息