2011-12-04 4 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日までの何日ですか?](0000000000) – 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

関連する問題