|
发表于 2003-10-19 19:45:38
|
显示全部楼层
到cnvbb找到这么一个帖子
时区显示的HACK
不必做太多地修改,更不用修改数据库,这次真的可以完美地解决时区问题啦!其实也很简单,以前为什么就想不到呢?昨晚灵机一动,花了十分钟搞定(连测试),写这篇 HACK 报告却花了将近 20 分钟。
现在可以任意定义默认的显示时区,不必再是那个莫名其妙的“GMT + xxx hours”啦!甚至对未注册/未登录的用户显示的时间也是自己定义的时区,例如“北京时间”,所有时间显示一切正常,对于已登录用户当然还是根据用户本身的选择的时区来显示。
事实上更专业的做法应该是在数据库中加两个字段,一个记录“显示时区名称”,一个记录“显示时区相对 GMT 的时差”,然后在控制面板加上对这两个参数的控制。虽然不难,不过还是留给 vB 开发组自己来搞吧,对于我们这些 vB Hack 业余选手来说,直接在程序里改也很方便。
1、查找:vb2/globe.php 中的一段代码:
如果是 203 找这一段:
$timediff='';
if ($bbuserinfo['timezoneoffset']!=0) {
if (abs($bbuserinfo['timezoneoffset'])==1) {
$timediff=" $bbuserinfo[timezoneoffset] hour";
} else {
$timediff=" $bbuserinfo[timezoneoffset] hours";
}
}
如果是以前版本找这一段:
$timediff='';
if ($bbuserinfo['timezoneoffset']!=0) {
$timediff=" $bbuserinfo[timezoneoffset] hours";
}
替换为:
// Beijing Time Hack by CX
$timediff = '';
if ($bbuserid > 0) {
if ($bbuserinfo['timezoneoffset'] != 0) {
if ($bbuserinfo['timezoneoffset'] == + {
$timediff = '北京时间';
} else {
$timediff = "格林威治时间 $bbuserinfo[timezoneoffset] 小时";
}
} else {
$timediff = '格林威治时间';
}
} else {
$timediff = '北京时间';
}
// End of Beijing Time Hack by CX
2、查找 admin/fuctions.php:
// ###################### Start show_nopermission #######################
function vbdate($format,$timestamp) {
global $bbuserinfo,$timeoffset;
return date($format,$timestamp+($bbuserinfo['timezoneoffset']-$timeoffset)*3600);
}
替换为:
// ###################### Start show_nopermission #######################
// Beijing Time Hack by CX
function vbdate($format,$timestamp) {
global $bbuserinfo,$timeoffset,$bbuserid;
if ($bbuserid>0) {
return date($format,$timestamp+($bbuserinfo['timezoneoffset']-$timeoffset)*3600);
} else {
return date($format,$timestamp+(8-$timeoffset)*3600);
}
}
// End of Beijing Time Hack by CX
3、修改模板 timezone
All times are GMT$timediff. The time now is $timenow.
改为:
所有时间均为 $timediff 现在时间 $timenow
http://bbs.cnvbb.com/showthread.php?s=&threadid=3498 |
|