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 秒前 // 第二个函数

db 中的任何设置?.....我使用 DATETIME 作为日期...

4

1 回答 1

0

您还没有明确说明您期望什么输出,但从您后来的评论来看,它应该是“1 小时前”?在这种情况下,我怀疑您遇到了时区问题——很可能是可怕的“夏令时”。尝试date('Y-m-d H:i:s')在 PHP 中回显,看看它是否具有您期望的值。

差异可能在于 php.ini 中设置的时区,或网络服务器本身的系统时钟,与数据库的时区设置或该服务器上的系统时钟不匹配。

于 2012-08-06T04:15:14.500 回答