Typecho 的时区问题

August 2nd, 2012

前天小小地改了 Blog 头部样式,指定时间输出相应的问候语。但是,我发现在早上竟然显示出了夜晚的样式,代码并没有出错,但调试过程中问题依旧,很令人百思不得其解。

这种情况下不鼓励使用 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);//日没时间
?>
上述日出日没时间代码以北京( 40°N 120°E )为标准,太阳天顶角一般设置为 90 ,或可根据实际情况修改相应参数,详细使用方法可以参考 PHP 手册。

日出日没时间代码可以让一些有日夜两种不同风格的 Blog,两个对应风格的 CSS 文件的切换时间更加接近于实际情况。

本文共有 3 则回复
  1. tony tony 回复

    直接使用本地的时间呢?

    1. Wis Wis

      在TE后台把时区设置成你本地的就行