Geburtstage Anzeigen

nchristoph

Erfahrenes Mitglied
Hallo

Ich hab jetzt noch 2 Probleme bei der Internen Webseite meiner Firma:

Und zwar haben wir einige Eitle Damen und Herren, die nicht wollen, das andere ihr Alter kennen. Mein Chef will aber, das die Geburtstage auf der Seite drauf sind. Als Kompromis habe ich jetzt ausgehandelt, das der Tag zwar angezeigt wird, aber nicht das Jahr.

Wie kann ich das bewerkstelligen?

Ich verwende im moment folgenden Code:

PHP:
Geburtstage
<?php
echo "<table width=\"100%\" border=\"0\">";
echo "  <tr>";
$sql="SELECT
		name,
		geburtstag,
		bild
	   FROM
		mitarbeiter";
		
	$result = mysql_query($sql) OR die(mysql_error());

	
    if(mysql_num_rows($result)) { // gucken ob was im Query drinsteckt
		while($row = mysql_fetch_assoc($result)) {
			echo "<td width=\"48\"><img src=".$row['bild']." /></td>";
			echo "<td width=\"48\">".$row['name']."</td>";
    		echo "<td width=\"82\">".$row['geburtstag']."</td>";
			}
	}
			   
echo "  </tr>";
echo "</table>";
?>

Das zu Problem 1

Und das andere Problem ist, das nur die Geburtstage angezeigt werden sollen, die in den nächsten 5 Tagen sind und vor 2 Tagen waren. Ich schon gegoogelt aber dazu nicht wirklich was verständliches gefunden hab.

Kann mir eventuell wer helfen?

mfg
 
schau dir mal mktime an, damit kannst du einen UNIX Zeitstempel generieren.

Auf mySql Ebene gibt es UNIX_TIMESTAMP()

So kannst du dir in PHP 2 Zeitstempel zusammenbauen und mit WHERE UNIX_TIMESTAMP(geburtstag) BETWEEN datum-2tage AND datum+5tage liegen.

bei der ausgabe kannst du mit date(mktime()) das jahr einfach weglassen.

soviel zur theorie ;)
 
OK danke erstmal für die Antwort.

Das mit dem Abschneiden hab ich schon mal geschafft, allerdings das mit dem timestamp check ich nicht ganz. Muss ich die spalte geburtstag umstellen oder kann ich DATE beibehalten?

Ist es einfacher wenn ich nur die Geburtstage der nächsten 5 Tage anzeigen lassen will?
 
Hi,

lass die Spalte auf DATE. Genau dafür ist der Datentyp da. ;)
Ich würde da auch nicht PHP-seitig irgendwelche Timestamps generieren. Das kann alles die Datenbank. Schau Dir mal die Date and Time Functions von MySQL an. Damit kannst Du das alles in Deiner Abfrage lösen. Die Hauptverdächtigen heißen NOW, DATE_ADD, DATE_SUB und DATE_FORMAT.
Dann musst Du im Script wirklich nur noch das Jahr wegschneiden.

LG
 
Für einen bekannten sollte ich gestern auch eine solche Query schreiben.

Das Problem is natürlich das date_diff alleine nicht reicht, da es über die Jahre hinweg zu falschen ergebnissen kommt.

im Endeffekt wurde es eine "hässliche" Lösung ^^ aber was besseres war mir nicht eingefallen...

SQL:
SELECT gebdat, DATE_FORMAT(`gebdat`,'%j')-DATE_FORMAT(NOW(),'%j') as
gebin 
FROM `mitarbeiter` WHERE
DATE_FORMAT(`gebdat`,'%j')-DATE_FORMAT(NOW(),'%j') >= -2 AND
DATE_FORMAT(`gebdat`,'%j')-DATE_FORMAT(NOW(),'%j') <= 5 
ORDER BY gebin ASC

gebin wird zurückgegeben in wieviel Tagen der Geburtstag ist.

ein bisschen Angst hatte ich hier vielleicht wegen Schaltjahren...

drum ist noch das hier entstanden:

SQL:
SELECT gebdat, DATEDIFF(DATE_FORMAT(`gebdat`,'2008-%m-%d'), NOW()) as
gebin FROM `mitarbeiter` WHERE
DATEDIFF(DATE_FORMAT(`gebdat`,'2008-%m-%d'), NOW()) >= 0 AND
DATEDIFF(DATE_FORMAT(`gebdat`,'2008-%m-%d'), NOW()) < 6 
ORDER BY gebin ASC

Auch wenn es keine Perfekten Lösungen sind, vielleicht als Ansätze
 
Zuletzt bearbeitet von einem Moderator:
Danke Michael

Deine Lösung hat mich schon um einiges weiter gebracht und um deine angst zu zerstreuen: es funktionieren beide lösungen mit Schaltjahren, zumindest auf meinem Lokalen Server.

Für mein Problem ist es zwar nicht die endgültige aber ein riesenschritt vorwärts.

Danke für die hilfe.

Kann ich übrigens jederzeit von erledigt auf offen schalten falls ich nochma ein problem haben sollte mit der funktion?
 
Zurück