• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Geburtstage

Cyberbob

Mitglied
Hallo, ich habe wieder ein Problem.... Falls es euch auffällt, ich will mich mehr mit JS beschäftigen, aber kann noch nich so viel.
Also, ich habe eine Liste mit vielen Geburtstagen. Da ich keine DB habe, muss ich es so machen. Wenn halt ein Datum gerade zutrifft, soll es mit document.write "erzählt" werden. Dies habe ich mit "if" gemacht. Aber ich weiß nicht so ganz, wie ich das im Gesamten mit nur einem "if" schaffe? Ach, seht euch einfach den Code an, dann versteht ihr, was ich meine...
PHP:
<script type="text/javascript">
var almut = new Date("February 22, 2012");
var anna = new Date("");
var saskia = new Date("");
var kim = new Date("");
var xenia = new Date("");
var mareike = new Date("");
var bastian = new Date("");
var jana = new Date("");
var paul = new Date("");
var antonia = new Date("");
var johanna = new Date("");
var nikolas = new Date("");
var nicola = new Date("");
var angelique = new Date("");
var stella = new Date("");
var vivien = new Date("");
var hanna = new Date("");
var max = new Date("");
var philipp = new Date("");
var eileen = new Date("");
var janna = new Date("");
var april = new Date("");
var jule = new Date("");
var jan = new Date("");
var laura = new Date("");
var maria = new Date("");
var angelina = new Date("");
var benedikt = new Date("");
var heute1 = new Date();
var heute2 = heute1.getDate();
if(heute2 == almut){
document.write("Almut hat heute Geburtstag");};
</script>
Es geht zwar auch nicht, wenn ich alle einzeln mit if zulege... aber ich möchte wissen, wie man es mit nur einem "if" schafft?
Wenn es noch irgendwo Fragen gibt, dann sagt Bescheid ;)

Danke
 
Zuletzt bearbeitet:
Werbung:
Lege die Geburtstage in einer Liste an, Stichwort assoziatives Array:
SELFHTML: JavaScript / Objektreferenz / Array
Code:
gb = new Object();
gb["almut"] = new Date("February 22, 2012");
gb["anna"] = new Date("");
// usw.
Diese kannst Du dann in einer Schleife durchlaufen und abfragen, ob der Tag gleich ist:
Code:
var jetzt = new Date();
for (var name in gb[i])
  if () // Hier abfragen, ob Tag und Monat von jetzt mit Tag und Monat von gb[name] uebereinstimmen
Viel Erfolg und viele Grüße - Ulrich
 
Hallo, was mach ich falsch ?? Ist nicht ein "Buchstabe" für alles?
PHP:
<html><head>
<script type="text/javascript">
gb = new Object ();
gb["Almut"] = new Date("February 23, 2012");
gb["Anna"] = new Date("February 24, 2012");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
var jetzt = new Date();
var jz = jetzt.getDate();
for (var name in gb[i])
  if (name in gb[i] == jz){document.write(name in gb[i] + " hat heute Geburtstag!")}
</script></head><body></body></html>

Wie sieht es eigendlich hiermit aus? http://www.html.de/html-und-xhtml/18960-geburtstage.html
 
Zuletzt bearbeitet:
Werbung:
Wie sieht es eigendlich hiermit aus? Geburtstage
Nein, Du adressierst falsch. Außerdem musst Du auch den Monat abfragen:
Code:
if (gb[name].getDate() == jetzt.getDate() && gb[name].getMonth() == jetzt.getMonth())
Wie sieht es eigendlich hiermit aus? Geburtstage
Diese Lösung mit so vielen Abfragen gefällt mir überhaupt nicht. Ist sehr unübersichtlich, wenn man einen GB hinzufügen will. Ich finde, so etwas macht man besser mit einer Liste.
 
muss ich denn den monat auch bei jedem gb jetz machen? und was is mit gb[name]: muss das so stehen bleiben?
Ich bin noch nicht soein JS-Spezi... danke dass du dir zeit nimmst
 
Hier besetzt Du doch den Monat schon vor:
Code:
gb["Almut"] = new Date("February 23, 2012");
und was is mit gb[name]: muss das so stehen bleiben?
Die Frage verstehe ich nicht. Ja, das muss so stehen bleiben. Der Javascript-Interpreter setzt bei jedem Schleifendurchlauf für name den aktuellen Wert ein, z. B. beim ersten Durchlauf:
Code:
gb["Almut"].getDate()
, beim zweiten Durchlauf
Code:
gb["Anna"].getDate()
 
Werbung:
Hier besetzt Du doch den Monat schon vor
Ja stimmt...
Ja, das muss so stehen bleiben. Der Javascript-Interpreter setzt bei jedem Schleifendurchlauf für name den aktuellen Wert ein
Ja ok, stand aufm schlauch...

Is der Code denn jetz so richtig, wenn ich die anderen namen alle eingebe? Weil er zeigt nicht an, dass almut heut geburtstag hat
PHP:
<html><head>
<script type="text/javascript">
gb = new Object ();
gb["Almut"] = new Date("February 23, 2012");
gb["Anna"] = new Date("February 24, 2012");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
gb[""] = new Date("");
var jetzt = new Date();
var tag = jetzt.getDate();
var monat = jetzt.getMonth();
for (var name in gb[i])
  if (gb[name].getDate() == jetzt.getDate() && gb[name].getMonth() == jetzt.getMonth()){document.write(gb[name] + " hat heute Geburtstag!")}
</script></head><body></body></html>
 
PS: So wie es jetzt ist, schreibst Du mit document.write() in die Head-Sektion. Du musst diesen Teil des Skriptes in den Body verlagern.
 
stimmt, body is dafür ja pflicht... Aber trotzdem zeigt er das nicht an, wer geburtstag hat... mmh.. *kopfkratz*
 
Werbung:
Ja, da ist mir noch ein Fehler unterlaufen. Es muss heißen
Code:
for (var name in gb)
dann funktioniert es. Und weiter:
Code:
{document.write(name + " hat heute Geburtstag!")}
denn Du willst ja den Namen der Person ausgeben, die GB hat.
BTW: Weil deine Date-Objekte auch das Geburtsjahr enthalten, könntest Du zusätzlich ausrechnen, wie alt die Person wird.
 
Danke :D es geht!!! endlich, aber ausrechnen wie alt diese person is brauch ich nicht ;) Vielen dank noch mal

EDIT: wie kann ich das denn ausrechnen??
 
wegen dem alter ausrechnen. ich weiß nich wie... hab hier ein schlechtes beispiel:
PHP:
var alter = jetzt.getFullYear() - gb[name].getYear();
for (var name in gb)
  if (gb[name].getDate() == jetzt.getDate() && gb[name].getMonth() == jetzt.getMonth()){document.write(name + " hat heute Geburtstag! " + alter + " Jahre, mannoman.")}
 
Werbung:
Der Ansatz ist schon richtig, aber Du musst bei beiden die selbe Funktion verwenden, nicht einmal getYear und das andere Mal getFullYear. Und Du musst die Berechnung natürlich in der Schleife machen. Vorher ist name undefiniert:
Code:
for (var name in gb)
{
  var alter = jetzt.getFullYear() - gb[name].getFullYear();
  if (gb[name].getDate() == jetzt.getDate() && gb[name].getMonth() == jetzt.getMonth()){document.write(name + " hat heute Geburtstag! " + alter + " Jahre, mannoman."
}
 
mmh, denn steht 0 (null) Jahre... da stimmt was nicht... Aber schon mal danke, ich habe weiteres über JS gelernt :D

hat sich erledigt.. ich dummbatz, oben bei dem name, der geburtstag hatte stand 2012... :(
 
Zuletzt bearbeitet:
Das liegt daran, dass Du in der Liste als Geburtsjahr 2012 angegeben hast. Du musst das Jahr angeben, in dem die Person geboren ist.
 
Werbung:
ja, hab ich gemerkt (letzten post aktualisiert). und danke, dass du dir dafür zeit genommen hast... :D

Und wenn ich jetz schreiben will, welcher person am nächsten tag geburtstag hat, kann ich ja das datum in jedem gb um 1 tag zurückstellen und dementsprechend in document.write anpassen oder?
 
Ich würde lieber aus dem Datum von heute das Datum von morgen ermitteln. Dazu muss man über dem Millisekunden-Wert gehen:
Code:
var eintag = 1000 * 60 * 60 *24;
jetzt_msek = jetzt.getTime;
morgen_msek = jetzt_msek + eintag;
morgen = new Date (morgen_msek);
// oder kuerzer:
morgen = new Date (jetzt.getTime() + eintag);
 
Werbung:
hallo noch mal, es sind in den gb namen überwiegend frauen und nur ein paar männer. Da ich nicht möchte, dass in der document.write "alter + " Jahre, mannoman" steht, sondern "Sie/Er ist " + alter + " Jahre alt geworden." Das Sie/Er soll sich jenachdem Namen ändern.. Wie mach ich das, habe kein plan, wie ich anfangen soll?
 
Zurück
Oben