解决 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

若无特别说明,本文系原创,遵循 署名-非商业性使用 3.0 (CC BY-NC 3.0) 协议,转载文章请注明来自【闪星空间】,或链接上原文地址:http://shansing.com/read/202/

16 条评论

  1. 发现技术文一枚~前来学习~

    1. 我发现我最近很少写技术文啦,哈哈。

  2. Wis Wis

    前来围观

    1. 明明就是从你博客转来的,哈哈。

  3. 我也来围观的

    1. 欢迎,围观的留评论不容易。

  4. typecho比wp小巧。不过wp用久了也不想转了。

    1. 我当年也用WP很多年了的。

  5. PogoPlug PogoPlug

    我在php.ini里设置了date.timezone = PRC
    但打开index.php还是显示时区不对
    Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /www/typecho/x.php on line 2
    是不是php.ini里的timezone和模板里的date_default_timezone_set()要同时设置而且值要一样才能生效?
    还有在模板的开头加

    格式是这样吗?

    1. 警告出现了,它要你别那样修改时区,说那样不安全,要你使用 date.timezone 设置或者 date_default_timezone_set() 函数,然后再告诉你设置没有生效。这样说的话你应该懂了吧,只要使用 date_default_timezone_set('PRC'); 就可以啦!
      不过,用在如 Typecho 0.8 等一些程序上可能会出现问题。

      1. 多谢指点,问题已经解决了,Openwrt系统缺少一个zoneinfo-asia软件包,装上以后date.timezone就生效了。我的博客routey.eicp.net,给提点建议。^_^

        1. 嗯……话说屏幕宽度是不是有点窄了?据说现在宽屏用户数都超 1024 宽度屏幕用户数了。而你这个模板的宽度才 790px——好吧,轻博客没有关系的啦。

  6. 我以前也做过关于日出日落的php文件,一看代码就有种熟悉的感觉……

  7. 今天确实发现这个问题了,一直想不明白

  8. 前来围观,逛逛

发表评论»

NO SPAMS! 不要发垃圾评论哦!

表情