所在的位置: php >> php发展 >> php中关于时区的那点事

php中关于时区的那点事

淘宝推广运营求职招聘QQ群 https://baijiahao.baidu.com/s?id=1713591262929630808&wfr=spider&for=pc

科普一下什么是时区

众所周知,地球绕着太阳转的同时也会自转,因此同一时刻不同地区所接收到太阳照射的情况不同,所以有的地区是日出,有的地区是日落,还有的地区可能是黑夜.

既然地球上的不同地区时间不同,那总要有统一的时间刻度才能方便文化科技交流吧,不然大家说的都是当地时间,这样岂不是乱套了?

有问题就要解决问题,不同地区时间不同就要统一时间标准,而统一时间标准的前提就是要弄清楚全球的时间差异到底在哪以及各地的当地时间如何互相转换.

原来的时间标准是格林尼治标准时间,随着精确计时的发展需要,已被新的时间标准所取代,目前的时间标准是世界协调时.

现在有了统一的时间标准,不同地区的时间就可以统一换算成世界协调时再转换成当地时间了,再也不会出现同一时刻不同时间了!

示例:

北京时间(UTC+8):-05-:30:00世界时间(UTC):-05-:30:00东部时间(UTC-5):-05-:30:00格林尼治标准时间

格林尼治标准时间(又称格林威治平均时间或格林威治标准时间,英文是GreenwichMeanTime,简称GMT),格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治时)的时间.

格林尼治是英国伦敦的一个小镇,是地理经度的起点,本初子午线所在的经度是零度经度,所在的时区是零时区.

我们知道一天共有24小时,对应着全球24个时区,而地球自西向东自转,零时区后依次是东一区到东十一区,然后是东十二区.紧接着是西十二区,西十一区到西一区,最后又回到零时区.

其中东十二区和西十二区是同一个时区,又被称为东西十二区.

总的来说,时区分为东十二区和西十二区以及零时区,其中东西十二区是同一个时区,因此共有24个时区.

示例:

由于北京位于东八区,比零时区多个8个时区,意味着北京时间比格林标准时间快8个小时.

所以,北京时间中午12点整的时候,格林尼治才清早4点钟,估计还在睡觉呢!(GMT+8就是北京时间)

格林尼治标准时间与地球自转有关,不能满足精确计时的需求,因此不再作为标准时间,取而代之的是协调世界时.

协调世界时

协调世界时(又称世界统一时间或世界标准时间或国际协调时间,英文是CoordinatedUniversalTime,简称UTC),协调世界时是以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间的一种时间计量系统.

在不需要精确到秒的情况下,GMT和UTC基本一致,但UTC是以更加精确的原子时为基础,因此常用于科学计算领域,也是目前时间计量的统一标准.

示例:

北京时间12:00,换算成GMT或UTC时间都是04:00(UTC+8也是北京时间)

北京时间

北京时间(又称中国标准时间),是首都北京所在的时区作为中国的标准时间,比格林尼治标准时间快8小时.

我国幅员辽阔,从西到东横跨东五,东六,东七,东八和东九等五个时区.所以全国统一采用首都北京所在的东八时区的区时作为标准时间,也就是北京时间.

时区信息数据库

时区信息数据库,又称Olson数据库,是一个主要应用于电脑程序以及操作系统的可协作编辑世界时区信息的数据库.

时区信息数据库采用按“区域/位置”命名规范,方便应用于计算机世界,其中英文地名中的空格用下划线“_”代替,连词符“-”只在英文地名本身包含时使用.

示例:

Asia/Hong_Kong:亚洲/香港Asia/Macau:亚洲/澳门Asia/Shanghai:亚洲/上海Asia/Taipei:亚洲/台北Asia/Urumqi:亚洲/乌鲁木齐上述时区主要是php中所支持的中国时区,参考亚洲所支持的时区列表

关于时区的编程实现

时区不仅仅是现实生活的问题,计算机编程世界也有时间,自然也离不开时区的概念.

在计算机世界中,一切都是数据,最好时区的概念也能体现在相关数据库中,幸运的是已经有前辈为我们提供了时区信息数据库,而各类语言基本都会提供时区的工具类.

php中的日期时间函数库是php内置函数库,我们可以方便地操作时间,设置时区等.

正常情况下,date扩展默认是启用的,我们可以输入phpinfo打印出php的基本信息,然后搜索关键字date就可以找到关于date扩展的相关信息.

示例

结果默认时区:当前时区:UTC当前时间:-05-:30:00

由此可见,假设不设置时区的话,默认时区是协调世界时,该时区和北京时间相比慢8个小时!

设置时区的三种姿势

翻阅php开发文档中可以找到目前所有支持时区列表,下面整理出关于中国的主要时区.

Asia/Hong_Kong:亚洲/香港Asia/Macau:亚洲/澳门Asia/Shanghai:亚洲/上海Asia/Taipei:亚洲/台北Asia/Urumqi:亚洲/乌鲁木齐常用时区是上海,并没有北京,当然也可以设置成PRC(中华人民共和国)!

如果没有设置时区的话,默认时区应该是协调世界时(UTC),虽说是通用的时间标准,但转换成当地时间还是需要一定换算的,而且看起来也不太舒服.

所以最好还是修改一下时区的设置项,如果业务不考虑国际化需求,那么永久性把时区固定就可以了,如果有国际化的业务场景,那么最好能够动态设置时区,这样就能清楚知道当地时间了.

因此,下面主要提供两种方式来设置时区,分别是静态设置和动态设置,其中动态设置又提供了两种方法.

静态修改php配置

php的配置文件默认位于:/private/etc/php.ini,打开文件后修改date.timezone选项.

由于这种方法是直接修改配置文件,因此时区设置后适用于所有脚本,只不过需要重启服务器方可生效.

示例

结果#去掉;并设置时区,取值可以是PRC,也可以是Asia/Shanghai等时区date.timezone=PRC详情请参考:


转载请注明:http://www.aierlanlan.com/tzrz/3730.html