PHP时间、时区 相差8小时的8从何而来?如何得到正确的时区?如何优雅的处理时间?
date_default_timezone_set('PRC');//中华人民共和国时区$date = new DateTime();var_dump($date->getOffset());
或者
var_dump(timezone_offset_get(new DateTimeZone( 'PRC' ), new DateTime())/3600);
上面输出值是28800秒,28800/3600 = +8
这就是我们的8的由来!
========================================
date_default_timezone_set('Europe/Paris');//欧洲巴黎时区$date = new DateTime();var_dump($date->getOffset());
或者
var_dump(timezone_offset_get(new DateTimeZone( 'Europe/Paris' ), new DateTime())/3600);
上面输出值是7200秒,7200/3600 = +2
这就是我们的2的由来!
看到了么?当你的PHP配置文件的时区不同,那么
$date->getOffset()的 值也是不同的!是个动态相对值!不可信!
换句话说,
- 1.不要在你的类库等里面自作多情的对时间戳进行+8或者-8处理,你就能保证你的服务器时区就是某个固定时区?
- 2.为了程序可移植性,也万万不可对时间戳进行+8或者-8处理,你就能保证你永远不换服务器,运维人员帮你热情的配置错了呢?
var_dump(date_default_timezone_get());可单独显示当前你的时区!
实战:
date_default_timezone_set('PRC');加载你config.php头部 就默认是中国时区了,接下来的一切,你可以忽略时区的问题了!!!
优雅的处理了PHP时区、时间的棘手问题!
注意:
echo time();
time()永远返回新纪元时间戳,是不受时区影响的哦!
小记:
显示1年后的时间戳、1月后、1个星期等时间戳:
echo strtotime('+1 week');echo strtotime('+1 month');echo strtotime('+1 year');echo strtotime('-1 year');//1年前的时间戳