解决 Typecho 的时区问题

经实践表明,如果 Typecho 模板文件中使用了 date_default_timezone_set() 这个函数,会导致时区混乱,文章和评论的时间会出现小时性的偏差。因此,我们不鼓励在这种情况下使用这个函数。这个时候,如果我们拿掉 date_default_timezone_set(),模板那里的时区又会不正确。

接着就翻了一次文件夹,看见了 usr/typecho/ 文件夹中有叫 Date.php,顾名思义,这文件应该是管日期时间的了。看见里面的一行代码,原来 Typecho 计算时间是用格林威治标准时间 + (后台设置的时区偏移 - 服务器的时区偏移)

但里面出现的函数肯定是不能直接使用的,可以转个弯变成这样:

<?php
$date = date("H:i",time()+($this->options->timezone - idate("Z")));
$sunrise = date_sunrise(time(),SUNFUNCS_RET_STRING,40,120,90,$this->options->timezone/3600);//日出时间
$sunset = date_sunset(time(),SUNFUNCS_RET_STRING,40,120,90,$this->options->timezone/3600);//日没时间
?>

上述 $date 变量给你的就是你博客后台所设时区的时间了,当然你把时间格式改下的话也是没问题的。日出、日没时间代码系以北京(40°N 120°E)为标准,可根据实际情况修改相应参数,详细使用方法可以参考 PHP 手册。太阳高度角一般设置 90 度即可。

这样子,我们就成功解决了 Typecho 的时区问题!本文系演绎自 Wis's Lab。

全部为采集文章,文中的 联系方式 均不是 本人 的!

发表评论