php中关于冬夏时令切换引发的问题

各位客官,欢迎光临小弟网站

在国内由于没有冬夏时令之分,所以直接对时间戳进行加减,不会出现问题。但是在国外的一些地方会有时令之分。

假设北京时间2019年11月25日 12:00:00,对应的时间戳是:1574654400,照理说这个时间戳加上一天86400秒,理论上就是北京时间2019年11月26日 12:00:00,事实上确实如此,国内的话这么算确实没什么问题,但是如果是国外时区的话,直接加上86400秒可能会有问题。

为了弄清楚这个问题,我们先来了解一下什么是冬夏时令?

夏令时

夏令时,表示为了节约能源,人为规定时间的意思。也叫夏时制,夏时令(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,在这一制度实行期间所采用的统一时间称为“夏令时间”。

一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。

冬令时

有夏令时就会有冬令时。高纬度和中纬度的许多国家在夏季到来前,把时针拨快一小时,新的时间就是夏令时,到下半季秋季来临前,再把时针拨回一小时,即形成冬令时。 [2] 

夏令时和冬令时的影响.

拿美国来说,美国各个地区的时间都不同,不像中国一样统一使用北京时间,美国一般以三月份第二个周日凌晨两点当成夏季的开始,十一月份第一个周日的凌晨两点当成冬季的开始。. 所以在每年的三月份第二个周日凌晨两点过后,时间就会往前 调快一个小时 ;同理,十一月份第一个周日把这一个小时 调回来。. 你也可以理解成美国那边,一年里面有一天只有23小时(夏天开始那一天),有一天有25小时(冬天开始那一天),其他时间每天都是24小时。. 所以你会发现,夏天的时候,中国的北京时间( 东八区 )与美国太平洋时区( 西八区 )的时差是 15 小时,而到了冬天却变成 16 小时.

代码体现

比如:1572764400(太平洋时间2019-11-03 00:00:00,单位:秒)

date_default_timezone_set('PST8PDT');
echo date('Y-m-d H:i:s',1572764400).PHP_EOL;
echo date('Y-m-d H:i:s',1572764400+ 86400).PHP_EOL;
date_default_timezone_set('Asia/Shanghai');
echo date('Y-m-d H:i:s',1572764400).PHP_EOL;
echo date('Y-m-d H:i:s',1572764400+ 86400).PHP_EOL;


2019-11-03 00:00:00
2019-11-03 23:00:00
2019-11-03 15:00:00
2019-11-04 15:00:00

解决办法

代码中尽量直接使用php的函数进行时间的加减就不会有问题,不要使用86400这样的数字直对时间戳进行加减。

代码示例:

date_default_timezone_set('PST8PDT');
echo date('Y-m-d H:i:s',1572764400).PHP_EOL;
echo date('Y-m-d H:i:s',strtotime("+ 1 days",1572764400)).PHP_EOL;
date_default_timezone_set('Asia/Shanghai');
echo date('Y-m-d H:i:s',1572764400).PHP_EOL;
echo date('Y-m-d H:i:s',strtotime("+ 1 days",1572764400)).PHP_EOL;
2019-11-03 00:00:00
2019-11-04 00:00:00
2019-11-03 15:00:00
2019-11-04 15:00:00


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值