欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

PHP 时间 8 小时差的 "8 "从何而来?如何获取正确的时区?如何优雅地处理时间?

最编程 2024-05-08 11:32:41
...
开源中国社区团队直播首秀,以分享为名讲述开源中国社区背后的故事”

PHP时间、时区 相差8小时的8从何而来?如何得到正确的时区?如何优雅的处理时间?

PHP时区支持列表

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年前的时间戳