2017-12-21 16 views
0

私は長い間、time ago関数で苦労してきました。基本的に私は投稿/コメントを日付timestampのmysqlデータベースに保存します。後で、追加時間を前に表示したいとします。例えば、53 minutes agoです。PHP時間前(間違った時間を返す)

私はユーザーのタイムゾーンをmysql dbに保存していますが、このtime ago関数をユーザーのタイムゾーンを使用して表示したいとします。

しかし、私の関数は間違った値を返します。例えば、私はUTC + 2で、私の国では11:54です。新しい投稿を追加してdbをチェックすると、投稿された時間は11:54ですが、前に(10秒前にする必要があります)時間を表示したい場合は1 hour, 59 minutes, 50 seconds agoと表示され、1 hour, 56 minutes, 26 seconds agoのようになります。

Car paradise screenshot - red box


タイムゾーン機能に

if(isset($userRow['timezone'])) { 
    date_default_timezone_set($userRow['timezone']); 
}elseif(isset($_COOKIE['timeZone'])) { 
    date_default_timezone_set($_COOKIE['timeZone']); 
} 

コールを取得するには、機能TIME_ELAPSED

<?php echo $user->time_elapsed($datevariable); ?> 

TIME_ELAPSED機能

function time_elapsed($datetime, $full = 7) { 
    $now = new DateTime; 
    $ago = new DateTime($datetime); 
    $diff = $now->diff($ago); 

    echo "</br>"; 
    echo "echo db timestamp for test: "; 
    echo $datetime; 
    echo "</br>"; 

    $diff->w = floor($diff->d/7); 
    $diff->d -= $diff->w * 7; 

    $string = array(
      'y' => 'year', 
      'm' => 'month', 
      'w' => 'week', 
      'd' => 'day', 
      'h' => 'hour', 
      'i' => 'minute', 
      's' => 'second', 
    ); 
    foreach ($string as $k => &$v) { 
      if ($diff->$k) { 
        $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); 
      } else { 
        unset($string[$k]); 
      } 
    } 

    if (!$full) $string = array_slice($string, 0, 1); 
    return $string ? implode(', ', $string) . ' ago' : 'just now'; 
} 
+0

あなたは常にUTCにすべてを変換して、共通の時間帯に基づいて、時間の数学をやってより安全になるだろう。間違いなくすべてをUTCに保管してください。これにより、サーバーとユーザーのタイムゾーンに関するあらゆる種類の問題が回避されます。それをディスプレイからデータを分離するものとして扱います。 – Elin

+0

@GianfrancescoAurecchia多分イタリア語の「fuso orario」は英語で「タイムゾーン」になることができます。また、:OPは、PHPコードの修正を求めています。修正はJS oneを使用するべきではありません。同意しますか? –

+0

はい、ありがとう、私の投稿を削除しました –

答えて

1

PHPがデフォルトタイムゾーンを使用していて、php.iniファイルdate.timezoneに保存されている可能性があります。 phpinfo();とdate.timezoneを探して見ることができます。そこで変更する必要があるかもしれません。あなたがそれらを必要とする場合は

利用可能なタイムゾーン:PHP timezones

+0

php.iniのデフォルトのタイムゾーンは空白です。 –

関連する問題