2010-11-14 31 views
0

之間的區別我做了這個,需要一些幫助調整,以便它給出了正確的結果發現2個日期

function daysDifference($end){ 
    //$start = "2007-03-24"; 
    //$end = "2009-06-26"; 
    $now = date("Y-m-d"); 
    $e = (is_string($end) ? strtotime($end) : $end); 

    $diff = abs($e - strtotime($now)); 

    $years = floor($diff/(365 * 60 * 60 * 24)); 
    $months = floor(($diff - $years * 365 * 60 * 60 * 24)/(30 * 60 * 60 * 24)); 
    $days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 * 24)/ (60 * 60 *24)); 

    return ($years == 0 ? '' : ($years == 1 ? $years . ' year ' : $years . ' years ')) . ($months == 0 ? '' : ($months == 1 ? $months . ' month ' : $months . ' months ')) . ($days == 0 ? '' : ($days == 1 ? $days . ' day ' : $days . ' days ')); 
} 

$end正從我的數據庫中抽取所以檢查,看看它的字符串或一個日期已經。

$e現在可以使用,但是當我試圖從$e減去$now我得到有趣的結果

例如:

$now是今天13th$e是一個項目的結束日期,這是假設給我我需要的......對吧?

我想要說12天剩餘時間,我得到1年12天。

$e = 0000-00-00(如果用戶沒有輸入結束日期),我會獲得40年10個月和26天的餘額。

我嘗試了很多不同的變化,我的計算,但我一直無處可去。

回答

2

商店真正的日期,而不是字符串,你可以問數據庫的差異。

SELECT DATEDIFF(CURRENT_DATE, end) FROM table 

如果你只是把事情分開365,你不會得到準確的結果。不是每年都有365天。

4

爲什麼要重新發明輪子?使用date_diff

<?php 
$datetime1 = date_create('2009-10-11'); 
$datetime2 = date_create('2009-10-13'); 
$interval = date_diff($datetime1, $datetime2); 
echo $interval->format('%R%d days'); 
?> 
+0

我的PHP技能是適中的,重新發明輪子隨着那個笑聲。 date_diff嗯。我會仔細看看!感謝 – Eli 2010-11-14 06:41:52

+1

@ s2xi,只要你想做一個通用函數,首先在php.net上查找它,你可能會感到驚訝! – 2010-11-14 06:42:51