0

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

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日期类型在哪里

谢谢你

4

1 回答 1

2

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

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

为了帮助您进行更多调试,您可以使用以下(文档)检查和设置 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';
于 2013-02-22T03:13:26.593 回答