Auf der Suche nach einer einfachen Möglichkeit aus meiner Usertabelle die Geburtstage der nächsten 10 Tage zu finden, bin ich zuerst auf einige Probleme gestoßen.

In meiner MySQL Usertabelle sind die Geburtsdaten gespeichert, also zum Beispiel "1985-01-05" für den Geburtstag am 5. Januar 1985. Da der Geburtstag im Idealfall jedes Jahr ist, kann ich das vollständige Datum inklusive Jahr nicht zur Berechnung nehmen. Weiterhin ist der Jahresübergang zu beachten. Vom 31.12. aus gesehen kann der 01.01. in der Zukunft oder im anderen Fall der Vergangenheit sein, je nach dem welches Jahr man nimmt.

Hier nun meine Lösung des Problems. Zuerst erstelle ich ein Array mit dem Monat und Tag der nächsten 10 Tage.

$tage = array();
for ( $i=0; $i<=10; $i++ ) {
  $tage[] = date("m-d", strtotime( "+ ".$i." days" ) );
}

Dann frage ich MySQL ob in meiner Usertabelle einer der Tage aufgeführt ist.

$query = 'SELECT name, DATE_FORMAT( geburtstag, "%m-%d" ) AS geburtstag
              FROM `user`
            WHERE DATE_FORMAT( geburt, "%m-%d" ) IN ("' . implode('","', $tage ) . '");';

Nur lasse ich mir für jeden User anzeigen an welcher Stelle im Array $tage sein Geburtstag steht. Die Stelle (key) ist gleichbedeutend mit den Tagen bis zum jeweiligen Datum.

while ( $row = $result->fetch_object() ) {
  echo "User " . $row->name . " hat in " . array_search( $row->geburtstag, $tage ) . " Tagen Geburtstag";
}

Diese Berechnung hat leider noch einen Haken! All jene die am 29.2. Geburtstag haben, werden hier nicht berücksichtigt. In Nicht- Schaltjahren ist im Array $tage natürlich der 29.2. nicht enthalten.

In Deutschland gibt es für die an einem 29. Februar Geborenen eine rechtliche Regelung. Zur Berechnung ihres Lebensalters ist die Fristberechnung des BGB heranzuziehen. In Nichtschaltjahren gilt nach § 188 Abs. 3 BGB die Vollendung des 28. Februar als Ablauftag, sie stehen daher in Nichtschaltjahren den an einem 1. März Geborenen gleich. Daraus ergibt sich beispielsweise, dass an einem 29. Februar Geborene nach 18 Jahren am 1. März volljährig werden.

Aktuell habe ich in meiner Usertabelle keine*n mit Geburtstag am 29.2., aber ich würde mich über einen Lösungsansatz für die gesetzliche Regelung in den Kommentaren sehr freuen.


Über

Dies ist das private Blog von Sven Anacker. Er schreibt am liebsten über Haustechnik, KNX, PHP, Linux, Modellbau und gelegentlich zu allem Möglichen. Beruflich ist er Selbstständig als Marketingconsultant und KNX Systemintegrator in Wuppertal.