刚发布完一篇文章,回头刷页面看的时候,发现展示的时间是8小时之前发布,去后台看时间正常,我滴个乖乖,这什么鬼!
开始以为自己没有设置时区,检查了也正常,设置的上海没错(我自己脑子有泡,时区不对后台怎么会显示正常呢😂)。
网上搜一圈都是改代码的,头大。算了,怀疑是不是自己用的主题有问题,还是打印下看吧,果然,挨个打印后发现调用get_gmt_from_date()这个方法后就时间就不对了,恩,算是找到原因了。但这是官方的方法呀,想着不会有这么大个问题吧,也懒的查了。
主题内源代码是这样的:
echo timeago(get_gmt_from_date(get_the_time('Y-m-d G:i:s')));
打印后发现get_the_time 和 get_gmt_from_date输出的一致,没搞明白当时主题作者为啥还要再调一遍的用意,不管了,去掉了get_gmt_from_date这一层,果然,时间也正常了!
修改后:
echo timeago(get_the_time('Y-m-d G:i:s'));
顺便给大家分享下,timeago是主题自带的一个时间格式化小方法,代码如下:
function timeago($ptime) {
$ptime = strtotime($ptime);
$etime = time() - $ptime;
if ($etime < 1) return '刚刚';
$interval = array(
12 * 30 * 24 * 60 * 60 => '年前 (' . date('Y-m-d', $ptime) . ')',
30 * 24 * 60 * 60 => '个月前 (' . date('m-d', $ptime) . ')',
7 * 24 * 60 * 60 => '周前 (' . date('m-d', $ptime) . ')',
24 * 60 * 60 => '天前',
60 * 60 => '小时前',
60 => '分钟前',
1 => '秒前'
);
foreach ($interval as $secs => $str) {
$d = $etime / $secs;
if ($d >= 1) {
$r = round($d);
return $r . $str;
}
};
}