2017-09-11 9 views
-3

このコードはリンクの下にあり、2日前のように正常に動作しましたが、動作を停止します。私がmysql CURRENT TIMESTAMPから時間を与えたとき、どれくらい時間が経過しても8時間、7時間または6時間しか出力されません。誰かがこれを改善する方法や、より良い方法を知っているなら、ここに投稿してください。私はPHP 5.6とPHP 7でそれを試しても、それを修正することはありません。php time関数が動作してから動作を停止します

例:

$時間= 2017年9月11日午後五時10分51秒

入力:

time_elapsed_string($時間)。

出力:

5時間前

#function from https://stackoverflow.com/questions/1416697/converting-timestamp-to-time-ago-in-php-e-g-1-day-ago-2-days-ago 
function time_elapsed_string($datetime, $full = false) { 
    $now = new DateTime; 
    $ago = new DateTime($datetime); 
    $diff = $now->diff($ago); 

    $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

奇妙な出力にその結果が、あなたが入力したタイムスタンプを提供してください。また、それが期待する出力を提供します。 –

+0

デバッグヘルプ(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。 – Script47

答えて

0

私はmysqlのCURRENT TIMESTAMPからの時間を与えたとき、それはちょうどそれが

されているどのくらいの8,7または6時間に関係なく出力

これはあなたのMySQLサーバーのように聞こえ、PHPサーバーは異なるタイムゾーンで動作しています。

提供したコードサンプルでは、​​タイムゾーンを考慮しておらず、代わりに指定された日付と現在の時刻との間のローカル時間差の量を計算するだけです。あなたがDateTime::setTimezoneを使用することができます異なるタイムゾーンを考慮して

http://php.net/manual/en/datetime.settimezone.php

例:

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; // 2000-01-01 00:00:00+12:00 

$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; // 2000-01-01 01:45:00+13:45 
関連する問題