我有一个关于如何正确显示执行操作后经过的时间的问题,我有一个简单的评论系统,并且想添加在发表评论时正确显示的功能,我做了一些研究并遇到了这个问题:
function ago($time)
{
$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
$lengths = array("60","60","24","7","4.35","12","10");
$now = date('Y-m-d h:i:s');
$now=strtotime($now);
if($now>$time)
$difference = $now - $time;
elseif($time>$now)
$difference = $time - $now;
$tense = "ago";
for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if($difference != 1) {
$periods[$j].= "s";
}
return "$difference $periods[$j] ago ";
}
我更改了变量 $now 以获取日期而不是时间的值,我有一个数据库,该数据库有一个表,该表有一个处理时间的列,它设置为 datetime 所以我然后使用 strtotime 函数将其转换并发送它通过函数:
$time=$row['time'];
$time=strtotime($time);
$ago=ago($time);
问题是它返回错误的时期,例如,一分钟前发表评论返回两小时前,时区是正确的,我什至打印了实际的日期和时间,例如,今天,我打印了这个:
10 hours ago 2013-02-08 12:09:35 2013-02-08 02:18:52
如您所见,时间之间的差异应该是两个小时左右,而不是十个小时。有没有人对如何做到这一点有更好的想法,或者任何人都可以指出错误在哪里?