您的位置 首页 php

PHP时区设置

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

时区的划分

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

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

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

PHP时区设置

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

配置文件中设置

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

 [Date]
; Defines the default timezone used by the date functions
; 
;date.timezone =  

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

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

使用 ini_set() 函数设置时区

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

使用示例如下:

 <?php   
ini_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)到现在时间的间隔秒数

文章来源:智云一二三科技

文章标题:PHP时区设置

文章地址:https://www.zhihuclub.com/78234.shtml

关于作者: 智云科技

热门文章

网站地图