Blog

BuddyPress 很酷的时区问题暂时得以解决

/wp-content/plugins/buddypress/bp-core.php, line 1289 – line 1292:

1
2
3
4
$since = $newer_date - $older_date;</p>

<p>if ( 0 &gt; $since )<br />
 return __( '[Use GMT Timezone]', 'buddypress' );

改成

1
2
3
4
5
$since = $newer_date - $older_date - 50400;</p>

<p>if ( 0 &gt; $since )<br />
 $since = $since + 50400;<br />
 //        return __( '[Use GMT Timezone]', 'buddypress' );

50400 是本地时间和服务器时间的时间差,以秒计,henkude 服务器在 UTC-6,而我们都在 UTC+8,因此相差14个小时,也就是50400秒,之所以要在后面再加回去是因为 BuddyPress 的这个 bug 只存在于全站动态 (Site Wide Activity) 里,其他地方都 OK,所以当这个值为负值时,只有全站动态里是正常的,其他地方就只能显示 Use GMT Timezone,所以要加回去才能正确显示。

归根究底,BuddyPress 是 WPMU 的一个插件,不知道为什么会使用两套时间戳算法,在 BuddyPress 官网上找了半天,只找到自己大半年前去问这个问题的帖子,还是被一个老外 moderator 揶揄了一番,郁闷。虽然也有说 trac 里面给出了补丁,可是怎么翻也没翻到,简直是一片混战。论坛上有人了这么个临时解决方法,没时间测试了,貌似也没我这样省事。

Update: 这个方法在 BP 安装24小时后开始失效,据官方论坛称,BP 的相对时间问题会在安装后24小时自动纠正,但实际上 blog 输出到全站动态的时间是正确的,而论坛帖子输出的时间确实服务器的时间而不是用户设定的本地时间,这个问题已经提交到 BP 的 trac,不知道会不会有下文,这实在是个历史悠久的老虫子了。附一张截图说明

Leave a Reply

Twitter 用户
请点击下方按钮并使用你的 Twitter 帐号信息登录本站