2012-08-06 85 views
1

我已经使用了相对时间很多功能在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'); 
?> 

输出:

刚刚//对于第一功能

-15747秒//对于第二功能

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

+0

更改$ diff = time() - strtotime($ date); TO-> $ diff = time() - $ date; – swapnesh 2012-08-06 03:57:23

+0

比它给“2012年8月6日”不是1小时前..... :( – Mehuldabhi 2012-08-06 03:59:13

回答

0

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

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

+0

ok echo date('Ymd H:i:s')输出:2012-08-06 04:17:41和当前在colck时间是9:45上午 – Mehuldabhi 2012-08-06 04:18:40

+0

正确,因此您的示例输入是(根据服务器的“现在”概念)未来4小时,而您使用的漂亮打印功能期望它在过去 该时间戳对应于当前UTC/GMT时间,而您的数据库大概会返回您的本地时间。我建议让您的数据库返回UTC(您没有告诉我们您使用的是哪个数据库以及如何,所以我不能更具体) – IMSoP 2012-08-06 04:24:28

+0

MYsql PHPMYADMIN – Mehuldabhi 2012-08-06 04:26:12