- 本文地址: https://www.yangdx.com/2021/03/180.html
- 转载请注明出处
来看两段代码
代码1(时区设为巴黎):
<?php
// 时区设为:欧洲巴黎
date_default_timezone_set('Europe/Paris');
$time1 = 1615776600;
$time2 = strtotime('+30 day', $time1);
echo 'time1: ' . $time1 . ', format: ' . date('Y-m-d H:i:s', $time1);
echo "\n";
echo 'time2: ' . $time2 . ', format: ' . date('Y-m-d H:i:s', $time2);
echo "\n";
?>
// 输出结果如下
time1: 1615776600, format: 2021-03-15 03:50:00
time2: 1618365000, format: 2021-04-14 03:50:00
代码2(时区设为上海):
<?php
// 时区设为:亚洲上海
date_default_timezone_set('Asia/Shanghai');
$time1 = 1615776600;
$time2 = strtotime('+30 day', $time1);
echo 'time1: ' . $time1 . ', format: ' . date('Y-m-d H:i:s', $time1);
echo "\n";
echo 'time2: ' . $time2 . ', format: ' . date('Y-m-d H:i:s', $time2);
echo "\n";
?>
// 输出结果如下
time1: 1615776600, format: 2021-03-15 10:50:00
time2: 1618368600, format: 2021-04-14 10:50:00
已知巴黎时区比上海时区慢7个小时,对比两段代码的执行结果,两个 $time1 格式化后显示没有问题,$time2 格式化后显示也是差7个小时。然而,同样是 +30 day
,两个 $time2 的时间戳却不同,相差了3600秒,也就是1小时。
为什么会出现这样的结果呢?这就跟国外实现的夏令时/冬令时有关。我国早些年也实行过夏令时,后来取消了。知乎上有两篇文章,可以看下:
冬令时转夏令时,少睡一小时!
https://zhuanlan.zhihu.com/p/126721764为什么中国实行夏时制取消了,而美国这么多年能够一直实行夏时制?
https://www.zhihu.com/question/20309772
综述,你已经知道,不同时区对 strtotime 函数的执行结果会有影响,如果将上述代码 strtotime('+30 day', $time1)
改为 $time1 + 3600 * 24 * 30
,得到的 $time2 时间戳才是一样的,但格式化成日期显示后,巴黎时区却又多出了1个小时。实际应用中,到底要用那种算法,应该取决于产品需求吧。
快来评论一下吧!
发表评论