我有一个函数可以计算自将一行添加到数据库以来耗时:
function added_on($time){
$now = time();
$time = $now - $time;
$blocks = array (
31536000 => 'year',
2592000 => 'month',
604800 => 'week',
86400 => 'day',
3600 => 'hour',
60 => 'minute',
1 => 'second'
);
foreach ($blocks as $unit => $size) {
if ($time < $unit)
continue;
$nrOfUnits = floor($time / $unit);
return $nrOfUnits.' '.$size.(($nrOfUnits>1)?'s':'');
}
}
问题是不准确,即误差大约落后 7 小时。 当在当前时间调用时,它返回如下:added 7 小时前。 函数调用如下:
$posted_on = strtotime($row['created_at']);
echo 'added '.added_on($posted_on).' ago';
其中$row['created_at']
是MySQL日期类型
谢谢
最佳答案
乍一看,我猜测是不同的时区。在纯 MySql 中完成相同任务的不同方法如下:
select time_to_sec(timediff(now(), created_at)) as seconds_ago from `table_name`
为了帮助您进行更多调试,您可以使用以下命令检查和设置 mysql 服务器的时区( docs ):
-- Check the global and session time_zone settings
select @@global.time_zone, @@session.time_zone;
-- Set the time zone to GMT -5 hours (EST):
set SESSION time_zone = '-5:00';
关于PHP,计算自添加以来的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15016087/