2016-01-13 153 views
0

我已經制定了一個函數來計算兩個日期時間之間的年齡,但我在月份和年份有問題,因爲月份可能是29,30,或31天。關於日期 - 時間差異的月份和年份

我很困惑,這是否會導致任何問題?如果是,那麼有人可能會提出解決方案。

這裏是我的功能

function time_age($date_time1,$date_time2 = ''){ 
    //store current date-time if it hasn't been given 
    if (empty($date_time2)){ 
     $date_time2 = date('Y-m-d H:i:s'); 
    } 
    //get date-time difference in seconds 
    $time_age = strtotime($date_time2) - strtotime($date_time1); 
    //to store if seconds, minutes, hours, days, weeks, months, years 
    $time_age_type = 'seconds'; 
    if ($time_age >= 60 and $time_age < 3600){ 
     $time_age_type = 'minutes'; 
     $time_age = number_format($time_age/60, 0); 
    }elseif ($time_age >= 3600 and $time_age < 86400){ 
     $time_age_type = 'hours'; 
     $time_age = number_format($time_age/3600, 0); 
    }elseif ($time_age >= 86400 and $time_age < 604800){ 
     $time_age_type = 'days'; 
     $time_age = number_format($time_age/86400, 0); 
    }elseif ($time_age >= 604800 and $time_age < 2629743){ 
     $time_age_type = 'weeks'; 
     $time_age = number_format($time_age/604800, 0); 
    }elseif ($time_age >= 2629743 and $time_age < 31556926){ 
     $time_age_type = 'months'; 
     $time_age = number_format($time_age/2629743, 0); 
    }elseif ($time_age >= 31556926){ 
     $time_age_type = 'years'; 
     $time_age = number_format($time_age/31556926, 0); 
    } 
    return $time_age.' '.$time_age_type.' ago'; 
} 

回答

1

怎麼樣這個功能是我使用什麼?

/** 
* Get a string of length of time elapsed since a specified time. 
* 
* @param int $time the specified time to check 
* @return string returns a string stating the length of time ago. 
*/ 
function timeSince($time) 
{ 
    $timeDifference = time() - $time; 

    $timeTokens = [ 
     31536000 => 'year', 
     2592000 => 'month', 
     604800 => 'week', 
     86400 => 'day', 
     3600 => 'hour', 
     60 => 'min', 
     1 => 'sec' 
    ]; 

    foreach ($timeTokens as $unit => $text) { 
     if ($timeDifference < $unit) continue; 

     $noUnits = floor($timeDifference/$unit); 

     return $noUnits . " " . $text . (($noUnits > 1) ? "s ago" : " ago"); 
    } 
} 

使用

echo timeSince(time() - 86400); 

輸出

1 day ago 

您還可以使用DateTime類的diff功能:

OO方法:

$datetime1 = new DateTime('2009-10-11'); 
$datetime2 = new DateTime('2009-10-13'); 
$interval = $datetime1->diff($datetime2); 

echo $interval->format('%R%a days'); 

一個程序方法:

$datetime1 = date_create('2009-10-11'); 
$datetime2 = date_create('2009-10-13'); 
$interval = date_diff($datetime1, $datetime2); 

echo $interval->format('%R%a days'); 

注:如果使用DateTime類,並希望找到兩個之間的區別UNIX時間戳,那麼您必須在時間戳之前放置一個@符號,例如:

new DateTime("@" . $yourUnixTimestamp); 

否則會引發錯誤。

相關問題