PHP,计算自添加以来的时间

时间:2013-02-22 02:55:44

标签: php mysql database

我有这个函数来计算自将行添加到数据库以来经过的时间:

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小时。 在当前时间调用时,它返回如下:7小时前添加。 函数被称为:

$posted_on = strtotime($row['created_at']);
echo 'added '.added_on($posted_on).' ago';

其中$row['created_at']是MySQL日期类型

谢谢

1 个答案:

答案 0 :(得分:2)

乍一看,我猜不同的时区。在纯MySql中完成相同任务的另一种方法如下:

select time_to_sec(timediff(now(), created_at)) as seconds_ago from `table_name`

为了帮助您调试更多,您可以使用以下(docs)检查和设置mysql服务器的时区:

-- 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';