Guter Mann…das wars und läuft jetzt.
Danke.
Gibt es einen Trick den auf „Heute“ folgenden, nächsten Geburtstag in eine Variable zu schreiben ?
Aktuell zeigt das Script ja den letzten Geburtstag im Array an an schreibt diese in eine vorhandene Variable.
Ideal wäre jedoch den kommenden Geburtstag zu sehen, den man beachten sollte.
Wäre eine feine Abrundung Deiner perfekten Arbeit hier.
Gruss
b71
Also ich benutze das Script von Ferengi und das läuft einwandfrei (danke nochmals!).
Ich habe zwei Stringvariablen angelegt und ein Mix aus den Scripten gemacht:
Wer hat heute Geburtstag
Wer hat als nächstes und wieviele Tage bis dahin
Zyklisches Ereignis ans Script (täglich 1x um 0:00 Uhr) und fertig.
<?php
$geburtstage = array("12-1-1950" => "Anna",
"24-1-1950" => "xx",
"6-2-1950" => "xxx",
"17-2-1950" => "xxxx",
"20-2-1950" => "xxxxx",
"25-2-1950" => "xxxxxx",;
$datum = getdate(time());
foreach ($geburtstage as $geburtstag => $name)
{
$geburtstag = split("-", $geburtstag);
if ($datum["mday"] == $geburtstag[0] and $datum["mon"] == $geburtstag[1])
{
echo "Heute hat ".$name." Geburtstag! <br />"."
";
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "$name");
}
else
{
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "--");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
foreach ($geburtstage as $datum => $name)
{
$datum = explode("-", $datum);
$heute = cal_to_jd(0,date("m"),date("d"),date("y"));
$geburtstag = cal_to_jd(0,$datum[1],$datum[0],date("y"));
if($heute<$geburtstag)
{
$diff = $geburtstag-$heute;
echo $name." hat in ".$diff." Tagen Geburtstag.";
SetValueString(41256 /*[Geburtstage\Nächster Geburtstag]*/, "$diff Tage: $name");
return;
}
}
?>
Neon
1. Januar 2010 um 23:42
23
Hi B71,
die Idee stammt von dreamy1.
Ich persönlich nutze im Dashboard die Teminverwaltung von Thomas:
http://www.ip-symcon.de/forum/f20/ferengi-masters-terminverwaltung-v2-6993/#post57534
dreamy1
12. Januar 2010 um 19:30
24
Hallo,
im Script oben ist noch ein kleiner Fehler und ich komm nicht drauf
Problem:
Die erste if-Schleife im oberen Teil des Scriptes wird ja für jeden Geburtstag durchlaufen. Wenn nun heute jemand Geburtstag hat, wird zwar der Name richtig in die Stringvariable geschrieben…aber sofort wieder auf „–“ gesetzt. Oder anders ausgedrückt: in der Stringvariable steht immer „–“. Das kommt vermutlich davon, dass die else-Anweisung bei allen Geburtstagen nach heute zum Tragen kommt.
Ziel soll sein, dass nur bei einem Geburtstag in der Stringvariable der Namen steht und sonst ein „–“.
Jemand eine Idee, wie man das lösen könnte?
Vielen Dank vorab!
dreamy1
12. Januar 2010 um 19:52
26
Sodele,
habe ein bissel umgebaut und schon gehts…naja, elegant ist sicher etwas anderes
$geburtstage = array("12-1-1950" => "Anna",
"24-1-1950" => "xx",
"6-2-1950" => "xxx",
"17-2-1950" => "xxxx",
"20-2-1950" => "xxxxx",
"25-2-1950" => "xxxxxx",;
$datum = getdate(time());
$merker = 0;
foreach ($geburtstage as $geburtstag => $name)
{
$geburtstag = split("-", $geburtstag);
if ($datum["mday"] == $geburtstag[0] and $datum["mon"] == $geburtstag[1])
{
echo "Heute hat ".$name." Geburtstag! <br />"."
";
$merker = 1;
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "$name");
}
else
{
if ($merker == 1)
{}
else
{
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "--");
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
foreach ($geburtstage as $datum => $name)
{
$datum = explode("-", $datum);
$heute = cal_to_jd(0,date("m"),date("d"),date("y"));
$geburtstag = cal_to_jd(0,$datum[1],$datum[0],date("y"));
if($heute<$geburtstag)
{
$diff = $geburtstag-$heute;
echo $name." hat in ".$diff." Tagen Geburtstag.";
SetValueString(41256 /*[Geburtstage\Nächster Geburtstag]*/, "$diff Tage: $name");
return;
}
}
?>
Hallo dreamy,
hatte das einen Grund, das du das Datum mit „-“ aufteilst anstelle vom „.“ oder kann man den auch nehmen?
Müßte beim String doch eigentlich egal sein?
Grüße,
Doc
dreamy1
12. Januar 2010 um 20:07
28
Hi Doc,
ich hatte das mit „.“ auch probiert, aber das hat nicht funktioniert. Warum…keine Ahnung, da sind meine PHP-Kenntnisse zu begrenzt
Hi dreamy1,
dein erstes Script mit einer kleinen Änderung:
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "$name");
break;
…sollte auch funktionieren.
Warum das mit dem Punkt jetzt genau nicht geht weiss ich auch nicht genau, evtl. was mit dem array Format?
Aber ich verstehe auch dein Script nicht so ganz? Was soll das mit dem Merker?
Warum läßt du das nicht weg und fügst nach dem ersten ELSE direkt
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "--");
ein, oder hab’ ich was übersehen?
Grüße,
Doc
dreamy1
12. Januar 2010 um 20:38
31
@Doc :
Genau so funktioniert es ja eben nicht - aus dem von mir genannten Grund.
@Nancilla :
Danke, das wäre natürlich vieel schöner Als PHP-Noob wie ich hat man es nicht leicht…
Ich meinte natürlich das vorletzte Script, was du hier gepostet hast
Schon probiert?
Wenn das „break“ dort nicht steht, wird das ganze Array durchlaufen, bis zum letzten Datum und danach in „else“, was natürlich das „–“ bringt.
Jetzt stoppt es beim ersten passendem Datum.
dreamy1
12. Januar 2010 um 20:50
33
Vielen lieben Dank nochmal an Nancilla, der Tipp mit dem „break“ war goldrichtig. Funktioniert jetzt wie es soll!
Hier nochmal der komplette Code für die Nachwelt:
<?php
$geburtstage = array("12-1-1950" => "Anna",
"24-1-1950" => "xx",
"6-2-1950" => "xxx",
"17-2-1950" => "xxxx",
"20-2-1950" => "xxxxx",
"25-2-1950" => "xxxxxx",;
$datum = getdate(time());
foreach ($geburtstage as $geburtstag => $name)
{
$geburtstag = split("-", $geburtstag);
if ($datum["mday"] == $geburtstag[0] and $datum["mon"] == $geburtstag[1])
{
echo "Heute hat ".$name." Geburtstag! <br />"."
";
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "$name");
break;
}
else
{
echo "Heute hat niemand Geburtstag! <br />"."
";
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "--");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
foreach ($geburtstage as $datum => $name)
{
$datum = explode("-", $datum);
$heute = cal_to_jd(0,date("m"),date("d"),date("y"));
$geburtstag = cal_to_jd(0,$datum[1],$datum[0],date("y"));
if($heute<$geburtstag)
{
$diff = $geburtstag-$heute;
echo $name." hat in ".$diff." Tagen Geburtstag.";
SetValueString(41256 /*[Geburtstage\Nächster Geburtstag]*/, "$diff Tage: $name");
return;
}
}
?>
… ah prima.
Jetzt tut’s nicht mehr ganz so in den Augen weh
Fehlen nur noch ein paar Anpassungen in der Ausgabe wenn 2 Leute an einem Tag Geburtstag haben.
Dann werde ich mein Geburtstagsscript demnächst doch mal umbauen, das sieht so etwas übersichtlicher aus …
Grüße,
Doc
dreamy1
12. Januar 2010 um 21:18
35
Ich habe die beiden Namen im Array einfach hintereinader ins selbe Datum geschrieben (mit Komma getrennt).
Ja, aber du musst noch irgendwie unterscheiden ob „heute hat …“ oder „heute haben …“?
Grüße,
Doc
dreamy1
12. Januar 2010 um 21:28
37
Achso…stimmt. Das ist bei mir nicht so tragisch, da die Namen per XBEE auf meine DIY-Wetterstation gebeamt werden - und dort gibts ein Geburtstagssymbol…das ist dann praktisch selbsterklärend. Die Namen trenne ich übrigens nicht per Komma, sondern mit „+“…da habe ich mich vorhin verkuckt.
Steht dann in etwa so da wenn heute zwei Personen gleichzeitig Geburtstag haben:
Heute: Lisa L. + Stefan P.
In 3 Tagen: Paul
Du kannst ja zählen, wieviele Werte das Array hat und dann entsprechend die Ausgabe setzen:
if ($datum["mday"] == $geburtstag[0] and $datum["mon"] == $geburtstag[1])
{
if (count(explode(", ", $name)) > 1)
{
echo "Heute haben Geburtstag: ".$name."
";
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "$name");
}
else
{
echo "Heute hat ".$name." Geburtstag! <br />"."
";
SetValueString(41693 /*[Geburtstage\Geburtstag Heute]*/, "$name");
}
break;
Array müsste in dem Fall so aussehen:
$geburtstage = array("12-1-1950" => "Anna, Tom",
"15-1-1950" => "xx",
"30-1-1950" => "xxx",
"17-2-1950" => "xxxx",
"20-2-1950" => "xxxxx",
"25-2-1950" => "xxxxxx");