Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmten Tag ermitteln
Tomcat Chriss 12-01-2004, 19:47 Hallo,
ich möchte in einen Kalender, der auf eine MySQL-Datenbank aufsetzen einen regelmäßig wiederkehrenden Termin einfügen. Leider wird von diesem phpNuke-Kalender keine entsprechende Funktion zur Verfügung gestellt.
Ich möchte jetzt entweder diretk per SQL oder über PHP und ein mysql_query per PHP diesen wiederkehrenden Termin einfügen. Das Problem dabei ist, dass es sich hiebei immer um den dritten Samstag im Monat handelt.
Gibt es eine SQL- bzw. eine PHP-Funktion, um diese Daten zu ermitteln?
Danke, Chriss
Original geschrieben von Tomcat Chriss
Das Problem dabei ist, dass es sich hiebei immer um den dritten Samstag im Monat handelt.
Gibt es eine SQL- bzw. eine PHP-Funktion, um diese Daten zu ermitteln?
in php:
ermittle zunächst, welcher wochentag der erste des monats ist.
wenn es kein samstag ist, addiere die notwendige anzahl an tagen dazu, um auf den nächsten samstag zu kommen; z.b. an einem donnerstag rechne datum + 2, um zum ersten samstag zu kommen. donnerstag gleich monatserster, daraus folgt also, der erste samstag im monat ist der dritte.
anschliessend addierst du noch zwei wochen = 14 tage drauf, und hast den dritten samstag in diesem monat: hier der siebzehnte.
Tomcat Chriss 12-01-2004, 20:55 Ich hab das jetzt mal gecodet, aber ich bekomme nicht ausgegeben. Weiß einer, wo ich einen Fehler hab und hat evtl. einer noch eine Idee für ein besseres Script?
<?php
for ($i = 1; $i < 13; $i++)
{
$stunde = 0;
$minute = 0;
$sekunde = 0;
$tag = 1;
$jahr = 2004;
$monat = $i;
$eingabedatum = date("D", mktime($stunde, $minute, $sekunde, $monat, $tag, $jahr));
switch ($eingabedatum)
{
case "Mon":
$tag = $tag + 19;
break;
case "Tue":
$tag = $tag + 18;
break;
case "Wed":
$tag = $tag + 17;
break;
case "Thu":
$tag = $tag + 16;
break;
case "Fri":
$tag = $tag + 15;
break;
case "Sat":
$tag = $tag + 14;
break;
case "Sun":
$tag = $tag + 20;
break;
$ausgabedatum = date("D", mktime($stunde, $minute, $sekunde, $monat, $tag, $jahr));
echo $tag.".".$monat.".".$jahr.": ".$ausgabedatum."<br>";
}
}
?>
Danke, Chriss
mrhappiness 12-01-2004, 21:28 könnte daran liegen, dass die schließende klammer deines switch zuweit unten steht, schau dir das nochmal an...
du gehst vor der ausgabe mit break raus, daher wird dein echo niemals nie nich ausgeführtmir persönlich gefällt folgendes besser:for ($i=1; $i<13; $i++)
echo date('d.m.Y', strtotime('3rd saturday', mktime(0, 0, 0, $i, 1, 2004))).'<br />';
Tomcat Chriss 12-01-2004, 21:50 Stimmt, ist mir gar nicht aufgefallen. Deine Variante ist auch nicht schlecht :rocks: , aber ich finde meine besser ;)
Danke, Chriss
mrhappiness 12-01-2004, 22:10 jedem tierchen... :)
verschieben tu ich's trotzdem
Tomcat Chriss 13-01-2004, 00:26 Hallo,
habe kleines Problemchen. In der Variable $datum bekomme ich jetzt das richtige Datum und dieses möchte ich mit folgendem Query in die Datenbank einfügen:
$query = "INSERT INTO events (eventDate, endDate) VALUES (".$datum.", ".$datum.");";
mysql_query($query) or die("Fehler!");
Hierbei habe ich aber das Problem, dass das Datum immer nur als "0000-00-00" in die Datenbank eingetragen wird. Die Spalte ist als DATE deklariert mit dem Standardwert 0000-00-00, wobei ich die richtige Reihenfolge von Monat und Jahr breücksichtige habe.
Das Datum wird auch korrekt ausgegeben, nachdem ich den Datumsstring als date('Y-m-d', ...) formatiert habe. Direkt vor dem Query lasse ich mir das $datum noch einmal ausgeben und da bekomme ich die korrekte Ausgabe.
Wo hab ich denn bloß noch einen Fehler?
Danke, Chriss
$query = "
INSERT INTO
events (eventDate, endDate)
VALUES
('".$datum."', '".$datum."');
";
mysql_query($query) or die("Fehler!");
so sollte es gehn ...
or die("Fehler!"); ist suboptimal ... mit or die("Fehler:".mysql_error()); hättest du den fehler schnell(er) gefunden
Tomcat Chriss 13-01-2004, 12:01 Hallo Wurzel,
ich fange SQL-Fehlermeldungen jetzt so ab, wie du es mir vorgeschlagen hast, aber es ist ja kein SQL-Fehler aufgetreten.
Er durchläuft das Script einwandfrei, füllt alle Felder (habe den Rest in dem Testscript herausgelassen) genau so, wie ich sie haben möchte, füllt halt nur die Datumsfelder mit Nullen, anstatt mit dem korrekten Datum.
Und nach Beendigung der Abarbeitung kommt nur noch ein kleines "FERTIG!", das ich eingebaut habe, wenn die Schleife fertig abgearbeitet wurde.
Es kommt allerdings keine Fehlermeldung. Muss ich das ermittelte Datum irgendwie anders formatieren? Für die Datenbank brauch ich wie gesagt das Format YYYY-MM-DD und genau so übergebe ich es auch an die Datenbank.
Warum geht es dann nicht richtig? :dontknow:
Danke, Chriss
mrhappiness 13-01-2004, 19:44 mach aus $query="INSERT ...";malecho $query="INSERT ...";wie sieht die fertige abfrage denn aus?
Tomcat Chriss 14-01-2004, 00:18 Ich hab den Fehler gefunden. Er hat mir das einzufügende Datum in der Query direkt ohne Hochkommas eingefügt. Hab die Hochkommas eingefügt und shcon geht's.
Danke, Chriss
|
|