谈到时区,就不得不谈到两个韶光,一个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
利用示例如下:
<?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)到现在韶光的间隔秒数