php中相对时间函数的问题

时间:2012-08-06 03:50:26

标签: php

我在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');
 ?> 

OutPut:

Just Now //第一个功能

-15747秒前//为第二个功能

db中的任何设置?.....我已经将DATETIME用于日期......

1 个答案:

答案 0 :(得分:0)

你还没有弄清楚你期望的输出是什么,但是从你后来的评论中它应该是“1小时前”?在这种情况下,我怀疑你正在遭受时区问题 - 很可能是可怕的“夏令时”。尝试在PHP中回显date('Y-m-d H:i:s')并查看它是否与您期望的值一致。

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