2013-04-05 40 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))); 

    ?>