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

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

有问题就要办理问题,不同地区韶光不同就要统一韶光标准,而统一韶光标准的条件便是要弄清楚环球的韶光差异到底在哪以及各地的当地韶光如何相互转换.

php当前时区php 中关于时区的那点事 Angular

原来的韶光标准是格林尼治标准韶光,随着精确计时的发展须要,已被新的韶光标准所取代,目前的韶光标准是天下折衷时.

现在有了统一的韶光标准,不同地区的韶光就可以统一换算成天下折衷时再转换本钱地韶光了,再也不会涌现同一时候不同韶光了!

示例:

北京韶光(UTC+8) : 2019-05-30 13:30:00天下韶光(UTC) : 2019-05-30 05:30:00东部韶光(UTC-5) : 2019-05-30 00:30:00

格林尼治标准韶光

格林尼治标准韶光(又称格林威治均匀韶光或格林威治标准韶光,英文是GreenwichMeanTime,简称GMT ),格林尼治标准韶光的中午是指当太阳横穿格林尼治子午线时(也便是在格林尼治时)的韶光.

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

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

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

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

php-timezone-method-gmt-geo.jpg

示例:

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

以是,北京韶光中午 12 点整的时候,格林尼治才凌晨 4 点钟,估计还在睡觉呢! ( GMT+8 便是北京韶光)

格林尼治标准韶光与地球自转有关,不能知足精确计时的需求,因此不再作为标准韶光,取而代之的是折衷天下时.

折衷天下时

折衷天下时(又称天下统一韶光或天下标准韶光或国际折衷韶光,英文是Coordinated Universal Time,简称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

当前韶光: 2019-05-30 05:30:00

选项值date/time support(日期韶光支持情形)enabled(已启用)timelib version(韶光库版本)2016.05(2016.05)\"大众Olson\"大众 Timezone Database Version(Olson 时区数据库版本)2018.5(2018.5)Timezone Database(时区数据库)internal(内部的)Default timezone(默认时区)UTC(折衷天下时)

由此可见,假设不设置时区的话,默认时区是折衷天下时,该时区和北京韶光比较慢 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://php.net/date.timezone

动态设置 php 配置

ini_set 支持设置当前脚本的默认时区选项.

静态设置时区仅仅适宜时区固定的情形,如果须要动态切换时区,修正配置文件就不能知足这种情形了.

因此,php 中还供应了动态修正 php.ini 配置文件的方法,ini_set() 方法刚好支持动态设置时区.

不用重启做事器,但仅仅针对当前脚本生效,个中 ini_set 方法支持的 php.ini 配置选项列表

示例

结果

当前时区: Asia/Tokyo

当前韶光: 2019-05-30 14:30:00

动态设置 php 时区

date_default_timezone_set 方法用于设置当前脚本的默认时区.

ini_set 虽然支持设置时区选项,但毕竟不是专业设置时区的方法,date_default_timezone_set 才是专门设置时区的方法.

这两个方法都属于动态设置时区,也都是针对当前脚本生效,也都不用重启做事器就能立马生效.

示例

结果

当前时区: Asia/Tokyo

当前时区: UTC

当前韶光: 2019-05-30 05:30:00

关于时区的一些总结

时区和韶光密切干系,统一韶光说的实在是统一韶光的标准,这样一个地区的当地韶光就可以轻易转换成另一个地区的当地韶光了.

目前天下上统一的韶光标准是折衷韶光时(UTC),中国的韶光标准是北京韶光,北京韶光比折衷韶光时快 8 个小时.

现实天下的时区也要反响到打算机天下,个中时区信息数据库便是用于表示现实天下的时区观点.

由此可见,时区是一个通用观点,不仅 php 有时区,java 和 js 等措辞也有时区观点,可以说只要有韶光的地方都离不开时区.

关于时区的小技能,你 get 到了吗?

美剧<<闪电侠>>当地韶光是星期二晚上八点开播,叨教北京韶光何时开播?英剧<<神探夏洛克>>北京韶光凌晨四点半开播,叨教当地韶光是何时开播?泰剧<<新铁石心肠>>当地韶光是晚上九点二十开播,叨教北京韶光是何时?

参考资料

时区干系知识扫盲时区时差韶光换算