php get date,[PHP]getdate()等时间函数的时区问题

作者分享了在开发环境中遇到的时区问题,代码在本地正确但在服务器上出错,通过发现date_default_timezone_get()函数揭示了时区设置差异。通过修改php.ini中的date.timezone设置,解决了跨平台时间显示问题。
摘要由CSDN通过智能技术生成

这两天一直被一个问题所困扰。同样的一段程序,在自己的机器上调试完全没有问题,放到服务器上时间显示就快了8个小时。显然这8个小时就差在时区设置上。我在自己的机器上写代码时,对timestamp进行了时区调整($now += 8 * 3600)之后再进行getdate()转换,结果完全正确;放到服务器上执行,就要将时区调整代码去掉之后才正常。一时百思不得其解。

写了个小测试程序:先用 time() 取得当前时间戳,再用 getdate() 获取当前的小时、分、秒,分别放到开发环境和服务器上执行。结果很显然,服务器上显示的时间是正确的(22点显示为22点),而我的机器的时间是错误的(22点显示为14点)。从时区的角度来看,服务器使用了正确的CST时区(中国时区),而我的开发环境的时区则是UTC的。但开发环境操作系统是Windows,时区设置也正确,为什么会出错?

从窄多的blog上看到,通过date_default_timezone_set()函数可以设置默认时区名。天啊,居然有这样的函数,查了查资料发现它的反义函数date_default_timezone_get(),将这个函数分别在开发环境和服务器上执行,果然,我的时区设置为 UTC。

知道了原因就好修改了。打开开发环境中的 php.ini,找到 date.timezone,去掉注释并将其设置为 Asia/Chongqing,再运行,这次结果正确了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值