2011-03-22 65 views
21

我需要從提供的兩個日期中獲得年數。這裏是我的代碼:計算PHP中兩個日期之間的年數

function daysDifference($endDate, $beginDate) 
{ 
    $date_parts1=explode("-", $beginDate); 
    $date_parts2=explode("-", $endDate); 

    $start_date=gregoriantojd($date_parts1[1], $date_parts1[2], $date_parts1[0]); 
    $end_date=gregoriantojd($date_parts2[1], $date_parts2[2], $date_parts2[0]); 
    $diff = $end_date - $start_date; 
    echo $diff; 
    $years = floor($diff/(365.25*60*60*24)); 
    return $years; 
} 

echo daysDifference('2011-03-12','2008-03-09'); 

$diff給出了一個數字輸出。當我返回$years時,我得到0。我做錯了什麼?

+0

請在發帖前先搜索。 [如何使用PHP計算兩個日期之間的差異?](http://stackoverflow.com/questions/676824/how-to-calculate-the-difference-between-two-dates-using-php) – 2011-03-22 05:23:50

+0

@Hans:感謝Hans – Deepak 2011-03-22 05:29:07

+0

你可能想澄清你在找什麼。你的函數名爲'daysDifference',並返回'$ years'並使用'gregoriantojd'。 – Matthew 2011-03-22 05:32:12

回答

-2

如果你想的年兩個日期之間的數字,爲什麼不直接使用下列內容:

function yearsDifference($endDate, $beginDate) 
{ 
    $date_parts1=explode("-", $beginDate); 
    $date_parts2=explode("-", $endDate); 
    return $date_parts2[0] - $date_parts1[0]; 
} 

echo yearsDifference('2011-03-12','2008-03-09'); 

,在這種情況下,將讓你:

3 
+0

他希望朱利安日的差異 – diEcho 2011-03-22 05:27:59

+0

這可能不會給出預期的結果。那麼12月31日和1月1日呢?我不認爲這應該是一整年,但它取決於上下文。 – Matthew 2011-03-22 05:34:52

+0

這一次只會返回年份數字之間的差異。這是誤導。 – Aistis 2017-07-27 08:11:07

81
$d1 = new DateTime('2011-03-12'); 
$d2 = new DateTime('2008-03-09'); 

$diff = $d2->diff($d1); 

echo $diff->y; 
+2

使用DateTime的+1。 – Jacob 2011-03-22 05:39:12

+2

是的,這個應該是推薦的一個。 – Aistis 2017-07-27 08:08:42

0

的$ start_date和$ end_date'的值是天數,而不是秒數。所以你不應該把$ diff與365.25 * 60 * 60 * 24分開。

function daysDifference($endDate, $beginDate) 
{ 

    $date_parts1 = explode("-", $beginDate); 
    $date_parts2 = explode("-", $endDate); 
    $start_date = gregoriantojd($date_parts1[1], $date_parts1[2], $date_parts1[0]); 
    $end_date = gregoriantojd($date_parts2[1], $date_parts2[2], $date_parts2[0]); 
    $diff = abs($end_date - $start_date); 
    $years = floor($diff/365.25); 
    return $years; 
} 

echo daysDifference('2011-03-12','2008-03-09'); 
1

傢伙繼承人一個良好的代碼我用.....它不是我的主意....我剛剛纔從網上的一些地方...

它也有多種選項希望這有助於.........

function datediff($interval, $datefrom, $dateto, $using_timestamps = false) { 
    /* 
    $interval can be: 
    yyyy - Number of full years 
    q - Number of full quarters 
    m - Number of full months 
    y - Difference between day numbers 
     (eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The datediff is "-32".) 
    d - Number of full days 
    w - Number of full weekdays 
    ww - Number of full weeks 
    h - Number of full hours 
    n - Number of full minutes 
    s - Number of full seconds (default) 
    */ 

    if (!$using_timestamps) { 
     $datefrom = strtotime($datefrom, 0); 
     $dateto = strtotime($dateto, 0); 
    } 
    $difference = $dateto - $datefrom; // Difference in seconds 

    switch($interval) { 

    case 'yyyy': // Number of full years 

     $years_difference = floor($difference/31536000); 
     if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) { 
      $years_difference--; 
     } 
     if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) { 
      $years_difference++; 
     } 
     $datediff = $years_difference; 
     break; 

    case "q": // Number of full quarters 

     $quarters_difference = floor($difference/8035200); 
     while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($quarters_difference*3), date("j", $dateto), date("Y", $datefrom)) < $dateto) { 
      $months_difference++; 
     } 
     $quarters_difference--; 
     $datediff = $quarters_difference; 
     break; 

    case "m": // Number of full months 

     $months_difference = floor($difference/2678400); 
     while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) { 
      $months_difference++; 
     } 
     $months_difference--; 
     $datediff = $months_difference; 
     break; 

    case 'y': // Difference between day numbers 

     $datediff = date("z", $dateto) - date("z", $datefrom); 
     break; 

    case "d": // Number of full days 

     $datediff = floor($difference/86400); 
     break; 

    case "w": // Number of full weekdays 

     $days_difference = floor($difference/86400); 
     $weeks_difference = floor($days_difference/7); // Complete weeks 
     $first_day = date("w", $datefrom); 
     $days_remainder = floor($days_difference % 7); 
     $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder? 
     if ($odd_days > 7) { // Sunday 
      $days_remainder--; 
     } 
     if ($odd_days > 6) { // Saturday 
      $days_remainder--; 
     } 
     $datediff = ($weeks_difference * 5) + $days_remainder; 
     break; 

    case "ww": // Number of full weeks 

     $datediff = floor($difference/604800); 
     break; 

    case "h": // Number of full hours 

     $datediff = floor($difference/3600); 
     break; 

    case "n": // Number of full minutes 

     $datediff = floor($difference/60); 
     break; 

    default: // Number of full seconds (default) 

     $datediff = $difference; 
     break; 
    }  

    return $datediff; 

} 

echo datediff('yyyy','2009-01-16','2011-03-16'); 
3

在一個PHP 5.2箱(是真的,它們仍然存在),因此沒有日期時間:: DIFF()支持我結束了使用此:

$dateString='10-05-1975'; 
$years = round((time()-strtotime($dateString))/(3600*24*365.25)) 
-1
<?php 

$date1=date_create("1992-02-22");  

$date2=date_create("2016-09-24");  

$diff=date_diff($date1,$date2);  

echo $diff->y;  

?> 

我認爲這是我用過的最好的答案。

謝謝

相關問題