1. 趣味生活常识网首页
  2. 投稿

php中时区代码处理(PHP时区设置方法)

无论是在生活中,还是程序中,时间都是一个重要的东西,在程序中时间可以让我们在整个流程的上下文起到梳理的作用。 而且在实际项目实践中,经常因为时区设置不当题,导致在显示时间或存储时间时出现一些低端问题,所以今天我们来一起谈一谈PHP的时区问题。

时区的划分

目前,国际上对全球的时区划分范围分为 24 个时区。每个时区都有自己的本地时间,同一时间内各时区的本地时间相差 1~23 小时,如英国伦敦本地时间(此地区GMT)与北京本地时间相差 8 个小时。

谈到时区,就不得不谈到两个时间,一个GMT, 另一个UTC。

GMT: 格林威治标准时间(Greenwich Mean Time,GMT), 这个时间原来是用来表示标准参照时间,现在被UTC取代。可以将它理解成一个地区的当地时间

UTC: 国际上新实行的标准参照时间(Universal Time Coordinated,UTC), 这个时间是作为一个标准时间,可以换算成其他时区(地区)的时间. 例如 GMT = UTC + 0( 由于GMT 所在时区为0) ,

PHP时区设置

理解完上述所述的概念之后,我们来看看在php中如何进行时区的设置。在设置之前我们先来了解一下php对不同时区划分标识,具体的参照标识符号在官方文档:

https://www.php.net/manual/en/timezones.php

配置文件中设置

PHP 的配置文件在安装目录下的 php.ini 文件,如果是Linux,一般会在安装目录下的etc目录中。在文件php.ini中找到date.timezone配置项,具体信息如下:

[Date]; Defines the default timezone used by the date functions; http://php.net/date.timezone;date.timezone =

其中date.timezone注释之后,在php中使用的话,默认是GMT,这里我们可以设置为PRC(中国时区), 或者设置为Asia/Shanghai,这只是一个时区标识符,用于标识当前php应该根据那个地区来进行处理时间。

不过,这种方法不建议使用,因为在生产实际项目中,一般代码部署了多台机器。如果需要更改配置,需要运维同事登录到不同的机器上去进行修改重启,这个过程中由于配置过程繁琐,容易导致手误出错。所以在这种情况下不建议用在实际项目。毕竟一旦出现服务宕机,对公司带来的是业务损失。

使用 ini_set() 函数设置时区

PHP 中的 ini_set($env, $value)函数可用于在代码中设置具体的配置项值。其中 $env为待修改的配置项,$value表示配置项的值。不过此函数有一定的使用限制,并不是所有的配置项都可以用此函数进行设置。具体文档可以到官方地址中查看:

https://www.php.net/manual/zh/ini.list.php

使用示例如下:

<?phpini_set(‘date.timezone’, ‘GMT’); echo’current timezone: ‘, ini_get(‘date.timezone’), PHP_EOL; ini_set(‘date.timezone’, ‘Asia/Shanghai’); echo’current timezone: ‘, ini_get(‘date.timezone’), PHP_EOL;

使用 date_default_timezone_set()

PHP 中的date_default_timezone_set($timezone_identifie), 参数$timezone_identifier为时区标识符,例如 UTC(格林尼治时间)或 Asia/Shanghai(上海)函数可以设置当前生命周期中请求的默认时区。

此方法在许多框架中都是使用此函数来进行时区的设置。比较常规的一个做法是,独立一个配置项在php中,每当一次请求,在代码中加载的配置阶段根据配置进行时区的设置。独立的配置项可以独立在自己的php配置文件中。或存储在数据库中。

使用示例如下:

<?php date_default_timezone_set(‘GMT’); echo ‘UTC current date:’, date(‘Y-m-d H:i:s’, time()) , PHP_EOL; date_default_timezone_set(‘Asia/Shanghai’); echo ‘shanghai current time:’, date(‘Y-m-d H:i:s’, time()), PHP_EOL;

注意: 在php中time()函数返回的是时间戳, 它返回的是1970-01-01 00:00:00(GMT)到现在时间的间隔秒数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至87172970@qq.com举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论