2010-08-20 27 views

回答

3

我用这个帮手笨(你可以在这里看到原来:codeigniter forums

我用这个代码:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

if(! function_exists('relative_time')) 
{ 
    function relative_time($datetime) 
    { 
     if(!$datetime) 
     { 
      return "no data"; 
     } 

     if(!is_numeric($datetime)) 
     { 
      $val = explode(" ",$datetime); 
      $date = explode("-",$val[0]); 
      $time = explode(":",$val[1]); 
      $datetime = mktime($time[0],$time[1],$time[2],$date[1],$date[2],$date[0]); 
     } 

     $difference = time() - $datetime; 
     $periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade"); 
     $lengths = array("60","60","24","7","4.35","12","10"); 

     if ($difference > 0) 
     { 
      $ending = 'ago'; 
     } 
     else 
     { 
      $difference = -$difference; 
      $ending = 'to go'; 
     } 
     for($j = 0; $difference >= $lengths[$j]; $j++) 
     { 
      $difference /= $lengths[$j]; 
     } 
     $difference = round($difference); 

     if($difference != 1) 
     { 
      $period = strtolower($periods[$j].'s'); 
     } else { 
      $period = strtolower($periods[$j]); 
     } 

     return "$difference $period $ending"; 
    } 


} 

我不确定你是否总是希望它说“天”,这段代码可以做任何最少的事情(比如'49秒前',或'17分钟前'或'6小时前',或者'10天前',或者几周或几个月(甚至几年)。如果你正在寻找的只是那些日子,那么很容易就可以改变这个脚本。

+0

完美。谢谢。 – pixeltocode 2010-08-20 13:38:55

0

您可以使用简单的PHP函数日期为。 ..

<?php echo date("F j, Y, g:i a"); ?> 
+0

我试图做的是从发布日期/时间减去当前的日期/时间并使其显示为“贴在X天前” – pixeltocode 2010-08-20 11:19:24

+0

@pixeltocode - 什么您发布日期/时间的格式? – vikmalhotra 2010-08-20 12:58:16

+0

好吧,我实际上没有发布它。我只想从mysql中检索日期。 – pixeltocode 2010-08-20 13:20:57

0

你可以像这样

$d1 = new DateTime("2013-07-31 10:29:00"); 
$d2 = new DateTime("2013-08-02 5:32:12"); 
echo $d1->diff($d2)->days; 
+0

请为您的代码发布一些解释,并检查您发布的答案是否确实符合OP的要求(请注意对其帖子的修改)。 – 2014-10-02 08:37:16