php、go项目开发的时区问题

背景

今天脑子里突然冒出一个疑问,前段时间做golang的web项目,框架是iris,测试环境是docker,发现官方的golang的docker容器里面的时区是UTC时区和北京时间相差8h,后面貌似是:

$ docker run -d \
-e "TZ=Asia/Shanghai" \
...

即运行容器时,指定容器内的时区信息!解决了该问题!

探究

网上搜索全局设置golang 的时区信息,给出的方式是:通过自定义一个tzinit,时区初始化包,来实现时区的全局设置,init会在被其他包import时,自动调用inti()方法:

那以前做php时,使用的是php-fpm的镜像,框架用的是tp5,为毛没得时区的问题?

找到以前的开发环境,进入php-fpm的容器:

docker exec -it a567afd32fe3 /bin/bash

得到:

root@a567afd32fe3:/var/www/html# date
Thu Dec 10 06:02:27 UTC 2020

emmm,居然也是utc的时区,那为啥代码层面使用time()或date输出的时间是正确的北京时间呢?是谁帮我们转换了时区?

首先想到的是php.ini里面是否存在时区设置?

打开php.ini文件
查找:date.timezone

那么意思是不是在php.ini设置亚洲时区?还有谁能设置时区呢?首当其冲就是web框架了,使用phpstorm全局搜索一下:

date_default_timezone_set函数,该函数是设置php脚本的时区信息,会覆盖php.ini的设置!达到动态设置的目的!

那就水落石出了,就是tp框架帮我们做了时区的设置,是在web生命周期里面,初始化应用阶段做了时区的设置,设置为了Asia/Chongqing时间,也可以理解,毕竟是咱国人开源的框架,面向的用户都是中国人,使用Asia/Chongqing时区也是理所当然的。

参考文章:

https://blog.csdn.net/longgeaisisi/article/details/104215867

https://stackoverflow.com/questions/54363451/setting-timezone-globally-in-golang

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值