wordpress使用time(),时间相差8小时(非date.timezone时区原因)

因为侧栏的“热点”模块用到了wordpress的缓存功能,所以昨天给“热点”模块增加了缓存时间输出功能,但是发现使用time()函数,然后用date函数格式化输出后,时间相差了8小时。看了网上都说是因为5.1版本之后的php增加了date.timezone时区,但是一番查看下来发现并不是php的问题。

因为海天使用的是vps,发现时间输出不对后,最先以为是vps的时间不对,但是ssh登录查看后,发现时间是对的。

接下来怀疑的就是php了,网上找的都是说明php的时区设置有问题,需要将php.ini里;date.timezone = 修改为date.timezone = “Asia/Shanghai” ,或者改为date.timezone = PRC(去掉前面的分号),这样时区就成功设置了php的时区。

但海天使用的军哥的lnmp,默认的就已经设置好了中国的时区。

海天百思不得其解,期间还以为是time()输出就错误了,期间还有一个小插曲,这个稍后再说。最后海天将怀疑对象指向了wordpress,但是看了下wordpress的后台设置也是正确设置了“上海”时区。

最后通过神奇的百度发现,wordpress因为在后台设置了时区,处理时间都是使用自己的函数current_time()。time() 是用来获取当前时间的 UNIX 时间戳格式,current_time()函数返回wordpress博客的当前本地时间。

所以我们这里只要将time()替换成current_time( ‘timestamp’ )就可以获取正确的本地时间了。

 

问题终于解决了,这里在写一下刚才说的小插曲,当时海天以为是time()函数输出的时间戳是不准确的,但后来无意中看到有说明,后来也想通了,其实每台计算机,重要和互联网同步了正确的时间,time()输出的时间戳都是一样的,而date函数输出成时间格式不同的原因是每台计算机不同的时区设置。

2条评论

  1. 行子说道:

    请问在哪个文件修改呢?

    • admin说道:

      不需要修改文件,因为这是wordpress内部调用的函数,修改了会造成整个wordpress调用时间出错。
      直接在模板文件中需要手动调用时间的地方,将原本要使用的time()替换成current_time( ‘timestamp’ )来使用就好了

发表评论

电子邮件地址不会被公开。 必填项已用*标注