Geburtstage der vergangenen/nächsten 30 Tage

  • Hallo,

    ich habe ein php-Script welches mir die Geburtstage der vergangenen und nächsten 30 Tage anzeigt. Funktioniert soweit auch ganz gut - bis ich nun im Dezember festgestellt habe, dass das bei Jahreswechsel nicht funktioniert.



    Das Feld Geburtstag hat das Format "1970-12-24 12:23:54".

    Wenn ich die Anzahl der Tage der kommenden Geburtstage auf z.B. 28 Tage begrenze (also für heute 2+28) dann funktioniert es auch.


    Es ist also erichtlich, dass es am Jahresübergang liegt.


    Hat vielleicht jemand einen Tipp für mich ?


    VG

    rs



  • Da dein Problem im Dezember auftritt liegt es nahe zu vermuten, dass das Jahr relevant für die Lösung ist. Du gibst "%m%d", also Monat und Tag mit. Hast du einmal versucht hier auch das Jahr (%Y) einzusetzen.

    Hallo Astrid,

    richtig: die Vermutung liegt sehr nahe, dass es am Jahreübergang liegt - so hatte ich es auch schon oben geschrieben.

    Ich habe div. Varianten mit %Y probiert - entweder wird garnichts mehr angezeigt oder das komplette Script schlägt fehlt und die Seite zeigt einen Fehler.


    Zur Info:

    Ich bin ja auch nicht der Verfasser der Abfrage, sondern habe es damals über google gefunden und es für mich angepasst. Meine php/SQL-Query-Kenntnisse sind doch eher rudimentär.


    Habe auch schon viel bei Tante Google geforscht, dieses Problem scheinen wohl div. Leute zu haben, aber eine Lösung habe ich leider noch nicht gefunden.


    Ich denke, hier müsste ein echte Query-Experte dran.


    Trotzdem danke.


    VG

    rs

  • Habe nun was gefunden was geht :-).

    Zu finden unter: https://www.codehaven.co.uk/my…thday-next-30-days-mysql/


    Code
    1. select * from users
    2. where ( month(date_of_birth) > month(CURDATE())
    3. and month(date_of_birth) < month(ADDDATE(CURDATE(),30)) )
    4. or ( month(CURDATE()) = month(date_of_birth) and day(date_of_birth) >= day(CURDATE())
    5. or month(ADDDATE(CURDATE(),30)) = month(date_of_birth) and day(date_of_birth) <= day(ADDDATE(CURDATE(),30)) )
    6. or ( year(CURDATE()) > year(ADDDATE(CURDATE(),30)) and month(date_of_birth) < month(CURDATE()) and month(date_of_birth) > month(ADDDATE(CURDATE(),30)) )

    Muss man nur noch anpassen und dann geht es.


    VG

  • Probier einmal das für die "kommenden" Geburtstage:


    Code
    1. DATE_ADD(geburtstag, INTERVAL YEAR(CURDATE())-YEAR(geburtstag) + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(geburtstag),1,0) YEAR) BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY)

    Also:


    Code
    1. $query = "SELECT * FROM #__users_details WHERE DATE_ADD(geburtstag, INTERVAL YEAR(CURDATE())-YEAR(geburtstag) + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(geburtstag),1,0) YEAR) BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY)AND (verstorben_status = '0')) ORDER BY MONTH(geburtstag),DAY(geburtstag)";


    Getestest ist es nicht. Die Idee ist die Jahresdifferenz anzupassen.