2011-12-04 31 views
1

我有這個腳本計算直到某人的下一個生日的天數(可能有更好的方法),但無論如何,如果某人的生日是3天前,我希望它能給我362天,直到下一個生日,但它給-3代替。沒問題,一年365天增加,要獲得正確的答案,但它根本不起作用,我想不通,爲什麼...代碼:試圖計算下一個生日的日子

$resultcurdate = mysql_query("select curdate()",$db); 

    $curdate = mysql_fetch_array($resultcurdate); 

    $curdate1 = explode('-', $curdate[0]); 
    $day1 = $curdate1[2]; 
    $month1 = $curdate1[1]; 
    $year1 = $curdate1[0]; 

    $birthdate = explode('-', $databack10[birthday]); 
    $day = $birthdate[2]; 
    $month = $birthdate[1]; 
    $year = $birthdate[0]; 

    $year = $year1; 

    if ($month1>$month){$year=$year+1;} 

    $birthdate5 = $year."-".$month."-".$day; 

    $resultdate = mysql_query("select datediff('$birthdate5', now())",$db); 

    $databackdate = mysql_fetch_array($resultdate); 

    if($databackdate < '0'){$databackdate = (365 + $databackdate); } 

任何想法,爲什麼這不起作用?

有沒有辦法用SQL查詢做到這一點?生日是日期字段類型。

+1

您可能更好的通過使用'DateTime()'類? – Nanne

+0

爲什麼在比較這些日期之前,你會對日期進行復雜的操作? 'SELECT DATEDIFF('$ databack10 [birthday]',NOW())'有什麼問題? – JJJ

+1

可能重複[XXX日期之前幾天?](http://stackoverflow.com/questions/654363/how-many-days-until-xxx-date) – hakre

回答

6
select 
date_field, 
abs(if(right(curdate(),5) >= right(date_field,5), 
datediff(curdate(),concat(year(curdate()+ interval 1 year),right(date_field,6))) , 
datediff(concat(year(curdate()),right(date_field,6)),curdate()))) as days 
from table 
+0

完美,非常感謝 –

+0

尋找了幾個小時,然後,最後,我正在尋找非常簡單的解決方案。奇蹟般有效。 – kentrenholm