1

PHPで相対時間に多くの関数を使用しましたが、異なる結果が得られます...助けてください

私の機能:

<?php 
function pretty_relative_time($time) { 
  if ($time !== intval($time)) { $time = strtotime($time); } 
  $d = time() - $time; 
  if ($time < strtotime(date('Y-m-d 00:00:00')) - 60*60*24*3) { 
    $format = 'F j'; 
    if (date('Y') !== date('Y', $time)) { 
      $format .= ", Y"; 
    } 
       return date($format, $time); 
} 
if ($d >= 60*60*24) { 
  $day = 'Yesterday'; 
  if (date('l', time() - 60*60*24) !== date('l', $time)) { $day = date('l', $time); } 
  return $day . " at " . date('g:ia', $time); 
} 
if ($d >= 60*60*2) { return intval($d / (60*60)) . " hours ago"; } 
if ($d >= 60*60)   { return "about an hour ago"; } 
if ($d >= 60*2)    { return intval($d / 60) . " minutes ago"; } 
if ($d >= 60)      { return "about a minute ago"; } 
if ($d >= 2)       { return intval($d) . " seconds ago"; } 
else    {return "Just Now"; }

}
function plural($num) {
if ($num != 1)
    return "s";
 }

   function getRelativeTime($date) {
$diff = time() - strtotime($date);
if ($diff<60)
    return $diff . " second" . plural($diff) . " ago";
$diff = round($diff/60);
if ($diff<60)
    return $diff . " minute" . plural($diff) . " ago";
$diff = round($diff/60);
if ($diff<24)
    return $diff . " hour" . plural($diff) . " ago";
$diff = round($diff/24);
if ($diff<7)
    return $diff . " day" . plural($diff) . " ago";
$diff = round($diff/7);
if ($diff<4)
    return $diff . " week" . plural($diff) . " ago";
return "on " . date("F j, Y", strtotime($date));
 }


 echo pretty_relative_time('2012-08-06 8:04:15') ;echo "<br/>";
 echo getRelativeTime('2012-08-06 8:04:15');
 ?> 

出力:

Just Now // 最初の関数用

-15747 秒前 // 2 番目の関数の場合

データベースの設定はありますか?.....日付にDATETIMEを使用しました...

4

1 に答える 1

0

期待している出力を明確にしていませんが、後のコメントから「1時間前」である必要がありますか? その場合、あなたはタイムゾーンの問題に苦しんでいると思います - おそらく恐ろしい「夏時間」です。PHP でechodate('Y-m-d H:i:s')してみて、期待する値が得られるかどうかを確認してください。

不一致は、php.ini で設定されたタイムゾーン、または Web サーバー自体のシステム クロックにあり、データベースのタイムゾーン設定またはそのサーバーのシステム クロックと一致していない可能性があります。

于 2012-08-06T04:15:14.500 に答える