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`

より多くのデバッグを支援するために、次の ( 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';
于 2013-02-22T03:13:26.593 に答える