2012-02-21 42 views
0

我正在使用一個函數(在網上找到它)來計算已經過去的時間。我傳遞兩個參數:發佈日期和當前日期。它會返回年,月,日,時,分或秒。它使用PHP 5.3的日期差異函數,它不會做版本5.2 :(PHP 5.3日期差異相當於PHP <= 5.2對自己的功能

function pluralize($zaehler, $inhalt) { 
return trim($zaehler . (($zaehler == 1) ? (" $inhalt") : (" ${inhalt}s"))." ago");}function ago($datetime, $datetime_post){  

$interval = date_create($datetime_post)->diff(date_create($datetime)); 

if ($interval->y >= 1) return pluralize($interval->y, 'year'); 
if ($interval->m >= 1) return pluralize($interval->m, 'month'); 
if ($interval->d >= 1) return pluralize($interval->d, 'day'); 
if ($interval->h >= 1) return pluralize($interval->h, 'hour'); 
if ($interval->i >= 1) return pluralize($interval->i, 'minute'); 
if ($interval->s >= 1) return pluralize($interval->s, 'second');} 

例如:

$post_date_time = "01/01/2012 11:30:22"; 
$current_date_time = "02/02/2012 07:35:41"; 

echo ago($current_date_time, $post_date_time); 

將輸出:

1 month 

現在我需要一個相當於函數「之前」,這將做同樣的事情,這取決於$ interval對象。

非常感謝你

附加信息: 沒有提供的解決方案實際上做了我一直在尋找的東西。我必須改進我的解釋,對不起。 最後,我必須有這個只有$間隔對象:

object(DateInterval)#3 (8) { ["y"]=> int(0) ["m"]=> int(1) ["d"]=> int(0) ["h"]=> int(20) ["i"]=> int(5) ["s"]=> int(19) ["invert"]=> int(0) ["days"]=> int(6015) } 

的沒有必要改變這麼多東西。

+0

難道你不能使用http://stackoverflow.com/questions/676824/how-to-calculate-the-difference-between-two-dates-using-php? – ale 2012-02-21 07:34:39

+0

另外,如果你不知道,你可以使用PHP的'date(...)'函數獲取當前日期時間:http://php.net/manual/en/function.date.php – ale 2012-02-21 07:36:45

+0

這是非常容易得到兩個日期的差異,以秒爲單位。將秒轉換爲小時,分鐘和日期是微不足道的。轉換爲數月和數年......如果您假定每個月的長度爲30天,並且每年有12個30天的月份,那麼這很容易。這個解決方案可以接 – 2012-02-21 07:41:03

回答

0

嘗試即時通訊使用。

function dateDiff($dformat, $endDate, $beginDate) 
{ 
$date_parts1=explode($dformat, $beginDate); 
$date_parts2=explode($dformat, $endDate); 
$start_date=gregoriantojd($date_parts1[0], $date_parts1[1], $date_parts1[2]); 
$end_date=gregoriantojd($date_parts2[0], $date_parts2[1], $date_parts2[2]); 
return $end_date - $start_date; 
} 

$ dformat是您在日期中使用的分隔符。

+0

爲什麼不使用strtotime() - http://php.net/manual/en/function.strtotime.php? – Timur 2012-02-21 07:41:14

+0

對我來說gregoriantojd是更好的bcoz我不必擔心日期格式,因爲它需要日期部分作爲參數,並且函數在幾天內返回。但也可以使用strtotime(); – Bert 2012-02-21 07:57:12

0

有一個簡單的方法。你可以在那裏改變一些東西,以適應你的需求。

<?php //preparing values 
date_default_timezone_set('Europe/Berlin'); 

$startDate = '2011-01-21 09:00:00'; 
$endDate = date('Y-m-d H:i:s'); 

// time span seconds 
$sec = explode(':', (gmdate('Y:m:d:H:i:s', strtotime($endDate) - strtotime($startDate)))); 

// getting all the data into array 
$data = array(); 
list($data['years'], $data['months'], $data['days'], $data['hours'], $data['minutes'], $data['seconds']) = $sec; 
$data['years'] -= 1970; 

var_dump($data); 

?> 
+0

感謝wormhit,看起來不錯。會嘗試讓你知道。 – ihazmore 2012-02-21 11:37:56

1

我只是需要(不幸)一個WordPress插件。這我使用了2次的功能。我張貼了這個答案here

  1. 在我的課堂呼喚- > DIFF()(我的類擴展日期時間,所以$這是參考日期時間

    function diff ($secondDate){ 
        $firstDateTimeStamp = $this->format("U"); 
        $secondDateTimeStamp = $secondDate->format("U"); 
        $rv = ($secondDateTimeStamp - $firstDateTimeStamp); 
        $di = new DateInterval($rv); 
        return $di; 
    } 
    
  2. 然後我重新創建了一個假DateInterval類(因爲DateInterval只在PHP> = 5.3中有效),如下所示:

    Class DateInterval { 
        /* Properties */ 
        public $y = 0; 
        public $m = 0; 
        public $d = 0; 
        public $h = 0; 
        public $i = 0; 
        public $s = 0; 
    
        /* Methods */ 
        public function __construct ($time_to_convert /** in seconds */) { 
         $FULL_YEAR = 60*60*24*365.25; 
         $FULL_MONTH = 60*60*24*(365.25/12); 
         $FULL_DAY = 60*60*24; 
         $FULL_HOUR = 60*60; 
         $FULL_MINUTE = 60; 
         $FULL_SECOND = 1; 
    
    //  $time_to_convert = 176559; 
         $seconds = 0; 
         $minutes = 0; 
         $hours = 0; 
         $days = 0; 
         $months = 0; 
         $years = 0; 
    
         while($time_to_convert >= $FULL_YEAR) { 
          $years ++; 
          $time_to_convert = $time_to_convert - $FULL_YEAR; 
         } 
    
         while($time_to_convert >= $FULL_MONTH) { 
          $months ++; 
          $time_to_convert = $time_to_convert - $FULL_MONTH; 
         } 
    
         while($time_to_convert >= $FULL_DAY) { 
          $days ++; 
          $time_to_convert = $time_to_convert - $FULL_DAY; 
         } 
    
         while($time_to_convert >= $FULL_HOUR) { 
          $hours++; 
          $time_to_convert = $time_to_convert - $FULL_HOUR; 
         } 
    
         while($time_to_convert >= $FULL_MINUTE) { 
          $minutes++; 
          $time_to_convert = $time_to_convert - $FULL_MINUTE; 
         } 
    
         $seconds = $time_to_convert; // remaining seconds 
         $this->y = $years; 
         $this->m = $months; 
         $this->d = $days; 
         $this->h = $hours; 
         $this->i = $minutes; 
         $this->s = $seconds; 
        } 
    } 
    

希望幫助別人。