2011-11-13 32 views
2

我創建了一個函數返回兩個日期PHP小區返回

<?php 


class days { 
    function dateDiff($start, $end) { 
     $start_ts = strtotime($start); 

     $end_ts = strtotime($end); 

     $diff = $end_ts - $start_ts; 

     $diff1 = ceil($diff/86400); 

     return $diff1; 

    } 
} 

我有這樣的代碼視圖之間的差別的浮動:

<?php 
$a = new days(); 
$days = $a->dateDiff($v[17], date('Y/m/d')); 
if ($days < 30) { 
    $ds = $days; 
    $tm = 'days'; 
} else { 
    if ($days < 365) { 
     $ds = $days/30; 
     $tm = 'months'; 
    } else { 
     $ds = $days/365; 
     $tm = 'years'; 
    } 
} 

$ V [17]是的從數據庫返回到視圖的日期。

當我比如進入2011年8月的一篇文章...這將顯示:

2.9666666666667個月前

我問自己...如何,因爲它是這個的Ceil方法不能返回一個int值應該做的?

如果這是正常的,那麼解決方案是什麼?

預先感謝您:)當它返回的天數

+1

細胞是返回一個int,然後你把它再次在這裏漂浮' $ ds = $ days/30' – Esailija

+2

你還應該記住,如果你做任何變量類型檢查,ceil(),floor()和round()確實返回浮點數,它們只是四捨五入到最接近的整數。 )http://uk.php.net/manual/en/function.ceil.php – Chris

+0

謝謝大家,我現在知道問題出在哪裏,謝謝Esailija,謝謝Chris :-) +1 – SmootQ

回答

3

ceil功能可按工作得很好。

但問題就在這裏:

if ($days<365){ 
    $ds=$days/30; 
    $tm='months'; 
} 

您沒有使用ceil這個時候!你應該嘗試類似$ds = ceil($days/30);

年數相同。

它可能是更精確的使用round代替ceil,所以有32幾天不2個月翻譯:

$days = $a->dateDiff('10 oct 2011',date('Y/m/d')); 

if ($days < 30) { 
    $ds = $days; 
    $tm = 'day'; 
} 
else { 
    if ($days < 365){ 
     $ds = round($days/30); 
     $tm = 'month'; 
    } 
    else { 
     $ds = round($days/365); 
     $tm = 'year'; 
    } 
} 

if ($ds > 1) { 
    $tm .= 's'; 
} 

echo "$ds $tm"; # => 1 month; or 2 months using ceil function 
+1

非常感謝alartur ...我多麼愚蠢......我之前沒有觀察到這個問題:-) – SmootQ