2013-04-05 43 views
0

我試圖以整數形式返回月份差異,並調用是否對錶格列進行調用。我的代碼:以整數形式返回月份差異

function ETA($ArrivalDate, $pattern = 'mysql'){ 


$patterns = array(
    'eu' => 'd/m/Y', 
    'mysql' => 'Y-m-d', 
    'us' => 'm/d/Y', 
); 
    $CurrentDate = date("Y-m-d"); 

    $ArrivalDate = $variants_data['ArrivalDate']; 

    $diff = $ArrivalDate->diff($CurrentDate); 

    return $diff->y; 

} 

的我把它與

<td>'.$_GET['ETA'].'</td> 

但並沒有什麼退換,我究竟做錯了什麼?

+0

請檢查我的答案。 – 2013-04-05 11:41:12

+1

函數作用域是你最初的問題 - $ variants_data不在作用域中;您使用未定義的值覆蓋$ ArrivalDate參數;爲CurrentDate使用DateTime對象;那麼如果你想要幾個月它是$ diff-> m而不是$ diff-> y – 2013-04-05 11:42:29

回答

3

可以使用DateTime對象在PHP中得到你想要的東西在一個簡單的方法:

function ETA($ArrivalDate){ 
    $currentDate = new DateTime(); 
    $arrivalDate = new DateTime($ArrivalDate); 
    $interval = $currentDate->diff($arrivalDate); 
    return $interval->format('%m'); 
} 

見工作示例:http://3v4l.org/UlPQo

如果你沒有在appropriate format $通過ArrivalDate你會得到一個exception拋出,所以你需要在Try/Catch中包裝呼叫。

有關返回值的更多信息,請參閱DateTime Interval Format

+0

@Budda我一直在試圖贏,但看起來我不是。此代碼崩潰的網站 $ currentDate = new DateTime(); $ arrivalDate = new DateTime($ ArrivalDate) – Mlungisi 2013-04-05 13:14:12

+0

您可以檢查您的PHP版本,DateTime類是在5.2.0中添加的,所以我們傾向於假設每個人都擁有它。有一箇舊的PHP版本可能是唯一可能導致服務崩潰的事情,否則,我建議服務器崩潰是巧合發生的一個單獨的問題。 – bubba 2013-04-05 13:37:14

+1

您在上述ETA方法中缺少兩個分號,返回格式應該是「%m」而不是「m」。請參閱http://3v4l.org/UlPQo – jszobody 2013-04-05 16:54:10

0

試試這個簡單的一個

<?php 
    //for months 
    $monthdiff=floor((abs(strtotime(date("d/m/Y")) - strtotime($ArrivalDate))/(60*60*24*30))); 
    //for days 
    $daydiff=floor((abs(strtotime(date("d/m/Y")) - strtotime($ArrivalDate))/(60*60*24))); 

    ?>