各位客官,欢迎光临小弟网站
在国内由于没有冬夏时令之分,所以直接对时间戳进行加减,不会出现问题。但是在国外的一些地方会有时令之分。
假设北京时间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
?
|