PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理

广告位招租
扫码页面底部二维码联系

在PHP开发中,我们经常会在时间问题上被原创内容,盗版必究。本文作者:唐霜,转载请注明出处。搞糊涂,比如我们希望显示一个北京时间,但【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。是当我们使用date函数进行输出时,却发【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】现少了8个小时。几乎所有的php猿类都必【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net须对php中几个重要的时间转换等方法进行【本文受版权保护】本文作者:唐霜,转载请注明出处。研究。本文就来梳理这些问题。

【本文首发于唐霜的博客】【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net

时间戳(timestamp)著作权归作者所有,禁止商业用途转载。

【版权所有,侵权必究】【未经授权禁止转载】本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。

GMT【访问 www.tangshuang.net 获取更多精彩内容】

【本文受版权保护】未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。

在时间戳这个点上,它是一个概念,而不是具【转载请注明来源】原创内容,盗版必究。体的编程问题,是计算机世界通用的一种约定原创内容,盗版必究。【原创内容,转载请注明出处】。时间戳是指格林尼治时间(GMT)197【转载请注明来源】本文作者:唐霜,转载请注明出处。0年01月01日00时00分00秒到当前【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。时间的总秒数。

本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net【本文受版权保护】【原创不易,请尊重版权】

GMT(也被称为世界时)是固定为本初子午【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net线经过地区的时间,因此被作为时间参照物。

本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】【转载请注明来源】【关注微信公众号:wwwtangshuangnet】

UTC【访问 www.tangshuang.net 获取更多精彩内容】

【原创不易,请尊重版权】【原创不易,请尊重版权】【本文首发于唐霜的博客】

协调世界时(UTC)和GMT一样都是一种未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。时间的参照物,但是他们的计算方法不同UT【转载请注明来源】原创内容,盗版必究。C是以原子时秒长为基础,在时刻上尽量接近【关注微信公众号:wwwtangshuangnet】【转载请注明来源】于世界时的一种时间计量系统,从精度上讲,未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。更加精确(自然也比GMT更精确),因此被【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。称世界统一时间,世界标准时间,国际协调时【转载请注明来源】【原创内容,转载请注明出处】间。

【本文受版权保护】本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。

Unix时间戳【原创不易,请尊重版权】

本文版权归作者所有,未经授权不得转载。【作者:唐霜】转载请注明出处:www.tangshuang.net【转载请注明来源】

Unix时间戳是在计算机领域才有的,每一【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。台电脑(服务器)在生产的时候,将GMT/未经授权,禁止复制转载。【作者:唐霜】UTC的1970年01月01日00时00本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。分00秒作为起始值进行计算,得到的总秒数【转载请注明来源】【版权所有】唐霜 www.tangshuang.net就是这个Unix时间戳。至于是GMT还是【未经授权禁止转载】本文作者:唐霜,转载请注明出处。UTC意义并不大,因为GMT和UTC的1【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。970年01月01日00时00分00秒是【版权所有,侵权必究】转载请注明出处:www.tangshuang.net一致的,起点一致的情况下,运行的秒数也是原创内容,盗版必究。本文作者:唐霜,转载请注明出处。一致的。

本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net【转载请注明来源】

为什么要时间戳?因为从0开始运行的秒数永【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net远相等,即使出现润秒,也并不影响时间戳。
著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.net 在php中,可以通过time函数获取时【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。间戳:

【版权所有,侵权必究】原创内容,盗版必究。转载请注明出处:www.tangshuang.net
time();

但是你应该明白,time()获取的是,当【作者:唐霜】未经授权,禁止复制转载。前这台电脑(服务器)上的Unix时间戳。【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net两台电脑可能这个时间戳并不相同,有的甚至本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。相差几十秒。从理论上讲时间戳应该是一摸一转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】样的,但是由于不同的电脑硬件出厂时的设定转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。不同,也会导致GMT/UTC起始值稍有差本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】异,甚至在计算每一秒时也有可能存在差异,原创内容,盗版必究。本文作者:唐霜,转载请注明出处。这台机器上一秒的时间比另一台要长也是有可原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】能的,时间久了,积累下来的时间差就会体现【转载请注明来源】原创内容,盗版必究。出来。但是,这种时间差一般不会超过几秒钟【本文受版权保护】【本文首发于唐霜的博客】

本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。

时区(Time Zone)【访问 www.tangshuang.net 获取更多精彩内容】

【转载请注明来源】本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】未经授权,禁止复制转载。

但是上面的time()的表述并不准确,因【作者:唐霜】本文作者:唐霜,转载请注明出处。为我们在实践中经常遇到time()得到的【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。值并不是我们想要的。对应的是,date(转载请注明出处:www.tangshuang.net原创内容,盗版必究。)函数得到的值,也可能出乎我们意料。

著作权归作者所有,禁止商业用途转载。【转载请注明来源】【关注微信公众号:wwwtangshuangnet】

什么是时区呢?也就是以GMT/UTC为参未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】照物的时间偏移。

【版权所有,侵权必究】【版权所有,侵权必究】【作者:唐霜】【作者:唐霜】【版权所有】唐霜 www.tangshuang.net

以GMT为参照物的时区【未经授权禁止转载】

本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】

在传统的教材里,全球被划分为24个时区,【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】首先基于经度,其次按照国家或地区,将每一【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。个地区划分到某一个时区,这样可以避免时间【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net上的混乱。在24时区划分之前,世界上的时本文作者:唐霜,转载请注明出处。【转载请注明来源】间换算并没有准确的参照,比如中国人去英国本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】,只能问当地人现在几点,然后拨自己的表来【本文受版权保护】本文版权归作者所有,未经授权不得转载。对。而当时区划分之后,中国人到了英国,只原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。需要拨慢8小时即可。在时区划分之前,英国【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。人跟中国人的时间可能并不是严格的8小时之【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。差。

【版权所有,侵权必究】【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net

但为了照顾到同一个国家内时间的统一,大部【本文受版权保护】【原创内容,转载请注明出处】分国家规定自己属于同一个时区,比如中国,转载请注明出处:www.tangshuang.net【作者:唐霜】统一规定为东八区,这样中国东部和西部可以【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】采用同一个时间。毕竟没有必要大家一定要在【转载请注明来源】【转载请注明来源】早上6点看到日出,沿海城市5点看,乌鲁木本文作者:唐霜,转载请注明出处。【未经授权禁止转载】齐9点看,并不影响大家的正常作息。

【作者:唐霜】【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net

在php中,提供了大量的地区作为时区切换转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。的标准,例如:

转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。
date_default_timezone_set('Asia/Shanghai');echo date('Y-m-d H:i:s'); // 获得的是上海所在时区的时间

注意:PRC是中国的地区时标志,并不在A【版权所有】唐霜 www.tangshuang.net【作者:唐霜】sia中,而是在Others里面找。

【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】

以UTC为参照物计算时区【转载请注明来源】

著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。

但随着UTC取代GMT成为世界标准时后,【版权所有,侵权必究】【原创内容,转载请注明出处】时区的计算开始使用UTC作为标准。UTC转载请注明出处:www.tangshuang.net【转载请注明来源】+8代表东八区,UTC-11代表西十一区【原创内容,转载请注明出处】【作者:唐霜】
本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】 不过随着精度需求的提升,按大时区计算已【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】经不能满足需求,0.5个时区也被普遍使用【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。,比如UTC+7.5。

【作者:唐霜】著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】

在PHP中,我们可以采用这种方式来切换时【本文首发于唐霜的博客】【版权所有,侵权必究】区。比如:

【原创不易,请尊重版权】原创内容,盗版必究。转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net
date_default_timezone_set('UTC');echo date('Y-m-d H:i:s'); // 获取的是0时区时间

时区给PHP带来的影响本文版权归作者所有,未经授权不得转载。

【本文首发于唐霜的博客】【未经授权禁止转载】转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。【未经授权禁止转载】

我们上面给出的代码并没有什么实际意义,因【本文受版权保护】转载请注明出处:www.tangshuang.net为你还不知道为什么要这样去做。实际上,p【本文受版权保护】【作者:唐霜】hp在使用date函数的时候,会依照所在本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。时区去进行计算。

【未经授权禁止转载】【原创不易,请尊重版权】【本文首发于唐霜的博客】未经授权,禁止复制转载。

例如,你的服务器是放在英国的,而服务器的本文版权归作者所有,未经授权不得转载。【转载请注明来源】默认配置php.ini中没有规定时区,那【原创内容,转载请注明出处】原创内容,盗版必究。么php就会以操作系统默认是时区作为时区【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】进行输出,这就会导致这台服务器上的dat【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】e()函数输出的时间是以UTC+0作为时【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net区的,如果你的用户在中国,那么网站的访客转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net看到的时间就会少8个小时。

【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。【转载请注明来源】

而上面使用date()进行输出的时间,就原创内容,盗版必究。【原创不易,请尊重版权】是我们所说的本地时间本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。

转载请注明出处:www.tangshuang.net【作者:唐霜】【版权所有】唐霜 www.tangshuang.net【本文受版权保护】【本文受版权保护】

本地时间,其实是指服务器上的程序输出时间原创内容,盗版必究。【版权所有,侵权必究】,date函数输出的时间依托Unix时间【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。戳和时区,因此它一定是一个不准确的时间,【本文受版权保护】【本文首发于唐霜的博客】因为Unix时间戳基本上都是不准确的,但【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】是这个不准确是可以忽略的,严重的是时区的【作者:唐霜】著作权归作者所有,禁止商业用途转载。偏差。

【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。【未经授权禁止转载】转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net

造成php输出时间混乱的原因总结起来:【原创不易,请尊重版权】

【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】
  • 使用默认的date函数的输出值【版权所有】唐霜 www.tangshuang.net
  • 【原创不易,请尊重版权】【转载请注明来源】【作者:唐霜】【版权所有】唐霜 www.tangshuang.net
  • 在保存时间的时候使用调整过时区的时间,而本文版权归作者所有,未经授权不得转载。【作者:唐霜】输出时又调整了时区
  • 【未经授权禁止转载】【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】

第一点比较容易理解,比如默认存进去的时候【本文首发于唐霜的博客】未经授权,禁止复制转载。存入的是time(),输出的时候使用da本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】te(),time()是没有错的,但是d【原创不易,请尊重版权】【转载请注明来源】ate()在输出的时候,时区和当前访客的【原创内容,转载请注明出处】【原创不易,请尊重版权】时区对不上,从而导致输出内容的错误。

本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。【原创内容,转载请注明出处】

如何在PHP中保证输出时间的准确性?转载请注明出处:www.tangshuang.net

本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】【访问 www.tangshuang.net 获取更多精彩内容】【访问 www.tangshuang.net 获取更多精彩内容】

我们想的更多的是如何保证时间的准确性问题【本文受版权保护】【作者:唐霜】。这要从多方面去考虑,输入输出的一致性与【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。非一致性是一个很大的挑战,你需要把握好全本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net局关系。

【转载请注明来源】【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】

1.php.ini配置文件中规定时区未经授权,禁止复制转载。

本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net

从php5.1.0开始,php.ini配本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】置文件中支持设置一个date.timez本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】ome的值来规定默认的时区,找到它,并改【未经授权禁止转载】【本文受版权保护】为:

未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】
date.timezone = PRC

当然,PRC也可以用php官方给出的列表【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】中的其他时区代表值表示。

原创内容,盗版必究。原创内容,盗版必究。【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】

这种配置的好处是,可以在所有的php代码【原创不易,请尊重版权】【作者:唐霜】中生效,坏处是灵活性差,而且大部分主机并【本文首发于唐霜的博客】【原创内容,转载请注明出处】不直接支持php.ini配置。

转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】未经授权,禁止复制转载。

2. ini_set(‘da【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】te.timezone’)

未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】

在php代码开头,可以使用ini_set转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】函数来临时修改一些php的默认配置,可以【本文首发于唐霜的博客】【访问 www.tangshuang.net 获取更多精彩内容】

【未经授权禁止转载】【原创内容,转载请注明出处】【转载请注明来源】未经授权,禁止复制转载。
ini_set('date.timezone','Asia/Shanghai');

这种方法的好处是比较灵活,需要配置时区的【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】代码里才使用,把这个配置放置在一个共享文本文作者:唐霜,转载请注明出处。【未经授权禁止转载】件里,可以使所有引用这个文件的php脚本【版权所有】唐霜 www.tangshuang.net【本文受版权保护】都获得这个配置。坏处是有的主机不支持in【本文受版权保护】著作权归作者所有,禁止商业用途转载。i_set。

【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。

3.date_default_timez【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。one_set

著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。

和ini_set函数一样,date_de【作者:唐霜】【本文首发于唐霜的博客】fault_timezone_set函数【未经授权禁止转载】【原创内容,转载请注明出处】也可以临时修改php配置。

【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】
date_default_timezone_set('Asia/Shanghai');

4.自己计算本文版权归作者所有,未经授权不得转载。

【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net

当你在输出日期的时候,可以考虑自己调整时未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】区,然后进行计算,将计算的结果格式化为日【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。期再输出。首先,我们要搞清楚哪些是可变哪【本文受版权保护】【未经授权禁止转载】些是不可变。

本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】【转载请注明来源】【版权所有】唐霜 www.tangshuang.net

可变:【作者:唐霜】date()不可变:转载请注明出处:www.tangshuang.nettime()、gmdate()

本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。

当你在输出一个日期的时候,如果使用dat本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.nete,就是可变的,但如果使用gmdate(本文作者:唐霜,转载请注明出处。原创内容,盗版必究。)就是不可变的,gmdate()永远把时【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。区当做是UTC+0,即使你通过前面三种方本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】法临时修改了时区,也不会影响gmdate【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。的输出结果,而这个时候,其实你又知道你的【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。访客所在的时区,所以,你可以自己计算一下原创内容,盗版必究。未经授权,禁止复制转载。

【原创内容,转载请注明出处】【作者:唐霜】【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】
// 方法1date('Y-m-d H:i:s',strtotime(gmdate('Y-m-d H:i:s').' +8 hours'));// 方法2(推荐)gmdate('Y-m-d H:i:s',time() + 8*3600);

使用上面的两个方法,无论你的服务器处于什本文作者:唐霜,转载请注明出处。【未经授权禁止转载】么时区,无论你是否使用date_defa【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.netult_timezone_set设置了新原创内容,盗版必究。未经授权,禁止复制转载。的临时时区,都不会影响结果,因为gmda未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】te永远以UTC+0作为参照,根本不会理【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。会你新设置的时区。甚至,你把你的这段代码转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。,从非洲的服务器搬到中国的服务器上,它的【版权所有,侵权必究】【本文首发于唐霜的博客】结果也还是一样(忽略timestamp的【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】微小误差)。

【未经授权禁止转载】【转载请注明来源】【未经授权禁止转载】【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。

有一个有趣的现象是,我们可以通过一个动态本文作者:唐霜,转载请注明出处。原创内容,盗版必究。的数字来控制date()是时区,而无需去【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】设置时区,比如:

【版权所有】唐霜 www.tangshuang.net【本文受版权保护】【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。
date('Y-m-d H:i:s',time() + n*3600)

其中的n则是时区,东八区就是+8,西五区【版权所有,侵权必究】未经授权,禁止复制转载。就是-5。而我们却可以找出这个动态的n值本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】,它和时区时时相关:date('Z')
【版权所有】唐霜 www.tangshuang.net【本文受版权保护】 date(‘Z’【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】;)是一个军事级别的应用,它用于计算以秒原创内容,盗版必究。原创内容,盗版必究。为单位的时区偏移量,比如东八区,它的值就【本文受版权保护】【本文首发于唐霜的博客】是8*3600,我们可以在time()的【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net基础上减去这个值,得到一个比当前时间戳少【原创内容,转载请注明出处】【原创不易,请尊重版权】时区偏移量的值,这个值在实际中没有任何意【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】义,它不代表任何时间戳(或者说是当前时间【本文受版权保护】【版权所有】唐霜 www.tangshuang.netn小时之前的时间戳),但如果我们再对这个本文作者:唐霜,转载请注明出处。【转载请注明来源】时间戳进行date运算时,date会把n著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net时区的偏移量加回来,这样就得到了一个固定【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】的UTC+0的日期时间:

【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。
$gmt_date = date('Y-m-d H:i:s',time() - date('Z'));

它的效果其实和【版权所有,侵权必究】gmdate('Y-m-d H:i:s')相同,但算法上更加复杂。本文版权归作者所有,未经授权不得转载。

【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】

同样的道理,我们以UTC+0作为基准,增【转载请注明来源】【版权所有,侵权必究】加这个偏移量,反而可以得到我们想要的时区【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net所在的时间:

【版权所有,侵权必究】原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。【作者:唐霜】著作权归作者所有,禁止商业用途转载。
$local_time = gmdate('Y-m-d H:i:s',time() + date('Z'));

但这和【访问 www.tangshuang.net 获取更多精彩内容】$local_time = date('Y-m-d H:i:s');没有任何结果上的区别。转载请注明出处:www.tangshuang.net

【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】【本文首发于唐霜的博客】

选择你合适的时间进行保存原创内容,盗版必究。

【版权所有,侵权必究】【版权所有,侵权必究】【本文受版权保护】【未经授权禁止转载】【本文首发于唐霜的博客】

在前面的分析里面,你看到有一种情况比较乱本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。,就是使用了调整时区后的时间进行保存,但著作权归作者所有,禁止商业用途转载。【本文受版权保护】是显示的时候,又进行时区调整,这导致显示原创内容,盗版必究。【原创不易,请尊重版权】错误。

原创内容,盗版必究。转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】【转载请注明来源】转载请注明出处:www.tangshuang.net

推荐的一种时间保存方案,是只保存time本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。stamp,也就是time(),它的值是【本文受版权保护】本文作者:唐霜,转载请注明出处。固定的,不随着时区的调整而改变,即使更换原创内容,盗版必究。转载请注明出处:www.tangshuang.net了服务器,它的误差也很小,所以有利于今后【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】将程序分发部署到不同的服务器上面。

【版权所有,侵权必究】【原创内容,转载请注明出处】【作者:唐霜】【原创内容,转载请注明出处】

而在自己显示的时候,可以确定一个方法,比本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】如上面推荐的方法2作为输出:

【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】原创内容,盗版必究。
function st_date($format,$timestamp = false) {
  $timestamp = is_numeric($timestamp) ? $timestamp : time();
  return gmdate($format,$timestamp + 8*3600);
}

这样就可以保证这段代码无论在哪里,都可以【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。输出东八区的时间。

【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。【本文首发于唐霜的博客】【本文受版权保护】

2016-10-04 57839 , , ,

为价值买单,打赏一杯咖啡

本文价值578.39RMB
已有12条评论
  1. panyi 2019-08-22 01:52

    最后的is_numberic是否写错了,应该是is_numeric吗?

    • 否子戈 2019-08-22 12:54

      谢谢指出,已更正

  2. 404 not found 2019-03-22 09:45

    谢谢这个gmdate(‘Y-m-d H:i:s’,time() + 8*3600);帮了大忙

  3. PHP(一)基础语法 « 2017-10-01 17:47

    […] PHP 手册 陈惠贞 , 陈俊荣.PHP 7&MySQL跨设备网站开发[M].北京:清华大学出版社,2017 PHP 教程 PHP 教程 PHP中变量的作用范围 PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理 […]

  4. gzswar 2017-05-31 01:51

    最近又研究了一下关于php里时间的转换问题。发现博主的文章有一点没有重点研究,就是关于冬令时和夏令时的问题。有些地区冬夏或者夏冬交替的时候会提前或推后一小时。按我个人的理解,date()函数应该是可以处理这个问题的,但是用gmdate()函数的话是不是就稍显麻烦了呢。希望有时间能探讨下这个问题。

    • 否子戈 2017-06-01 13:28

      很久没有写php了,确实很多细节都需要慢慢研究,如果你有了答案,希望可以告诉我

  5. gzswar 2017-02-24 06:36

    你好,谢谢你的这篇文章。写的十分详尽清晰,帮我彻底理解了php中时间日期函数之间与时区之间的关系。我注意的你的网站的模板很酷,能问一下是你自己写的还是在什么地方找的吗?能分享一下这套模板给我吗,或者我在哪里可以买得到呢?

    • 否子戈 2017-02-24 09:21

      自己写的,不提供下载,谢谢关注^_^

      • pookpal 2017-03-13 15:03

        博主全能,非常佩服,可以仿一下用来搭建自己的博客站吗

        • 否子戈 2017-03-13 16:19

          可以,不过最好写篇博文说明一下~

          • pookpal 2017-03-13 16:21

            恩,非常感谢,这个是wp的,我打算用node写一个,向博主学习,始终保持前进的好奇心

          • 否子戈 2017-03-14 13:49

            建好通知一声,我也学习下