Lisa: Kalender, aber wie ?

Hi Jungs und Mädels

Ich möchte gern einen php Kalender selber schreiben. Wie sollte ich dabei vorgehen?
Ich stelle mir vor eine Blätterfunktion der Monate und Jahre. Feiertage sollten je nach Jahr immer mit rein. Naja und für jeden Tag würde ich gern die Möglichkeit haben wollen event. Notizen oder Infos hinzuzufügen.

Das mit dem Hinzufügen von Daten zu den Tagen sollte ich ja hinbekommen. Aber mich würde der Grundaufbau eines solchen Kalender intressieren.

Wie sollte ich anfangen?
Vielen Dank für eure Klasse Hilfe. LG Lisa

  1. Hallo Lisa,

    Das mit dem Hinzufügen von Daten zu den Tagen sollte ich ja hinbekommen. Aber mich würde der Grundaufbau eines solchen Kalender intressieren.

    Prinzipiell gibt es viele Möglichkeiten an einen Kalender heranzugehen, hängt z.B. u.a. davon ab in welcher Form Du deine Notizen oder Infos speicherst.

    Also ich habe mal einen kleinen Kalender geschrieben, anzusehen auf:
    http://fewo.bauderweb.de/index.php?menu_id=0&site=objekt/whg.belegtkalender_whg_gross.inc.php
    (beachte auch die erweiterten Anzeigeoptionen, also Feiertage, etc.)

    Wenn das in etwas in der Art ist wie Du dir es vorstellst, kannst Du gerne konkrete Fragen dazu stellen.

    Grüsse
    Frankie

    1. So in der Art habe ich mir etwas vorgestellt. Gefällt mir.
      Meine Frage ist trtozdem nicht richtig beantwortet worden. Um auf die Art und Weise zu artworten wie ich die Daten handeln will werde ich mir eine mySQL Tabelle anlegen.

      1. Hallo Lisa ,

        Meine Frage ist trtozdem nicht richtig beantwortet worden. Um auf die Art und Weise zu artworten wie ich die Daten handeln will werde ich mir eine mySQL Tabelle anlegen.

        Was veranlasst dich zur Annahme, deine Frage sei "nicht richtig" beantwortet worden? Ich habe dir doch geschrieben, daß es nahezu beliebig viele Ansätze gibt an ein Kalenderskript heranzugehen und bat dich konkrete Fragen zu stellen. Eine einzige "richtige" Antwort gibt es also nicht.

        Ok, andersrum gefragt: Wie weit bist schon mit deinem Skript und an welcher Stelle hakt es noch, bzw. wo kommst Du nicht weiter? Und beachte bitte bei den konkreten Fragen den _relevanten_ PHP-Code mit ausführlicher Fehler bzw. Problembeschreibung posten.

        Grüsse
        Frankie

        1. Vielen Dank erneunt für deine Hilfsbereitschaft. Ich habe weder mit dem Programmieren angefangen, noch gibt es Fehler. ;)

          Es geht mir darum, welcher Weg, welche Gesichtspunkte sind bei einen Kalender wichtig und zu beachten. Wo kann es schwierig werden ? Das sind eigentlic hFragen die ich hätte stellen müssen.

          1. Hi,

            Es geht mir darum, welcher Weg, welche Gesichtspunkte sind bei einen Kalender wichtig und zu beachten. Wo kann es schwierig werden ? Das sind eigentlic hFragen die ich hätte stellen müssen.

            Naja, probleme gibts wahrscheinlich bei den Feiertagen. da es da ja
            bewegliche gibt, weis nicht ob die wie das Schaltjahr einem gewissen
            Muster folgen. Fals du das schaltjahrmuster nicht kennst:

            Ein Jahr ist ein Schaltjahr wenn es sich durch 4 teilen läßt.
            Ein Jahr ist aber kein Schaltjahr wenn es sich durch 100 teilen läßt.
            Ein Jahr ist wieder ein Schaltjahr wenn es sich durch 400 teilen läßt.

            MfG

            1. Das Ausgeben der Tage pro Monat kann ich ja über eine while Schleife machen in Verbindung mit dem date(). Nur wie schreibe ich die Wochentage zu den einzelnen Tagen?

              BSP.
              Mai 200x

              Mo Di Mi Do Fr Sa So
              01 02 03 04 05 06 07
              ...

              Juli200x

              Mo Di Mi Do Fr Sa So
                    03 04 05 06 07
              08 09 10 11 12 13 14
              ...

              So mein ich das!
              Nur den Ansatz bitte.

              1. Hi,

                Nur den Ansatz bitte.

                Du nutzt date() doch schon, ist doch ansatzt genug, Schau dir mal die möglichen Parameter an z.B.:

                • w
                • D
                • l
                • F
                • M

                Nur mal so als Ansatz.

                1. Hi,
                  Nachtrag:
                  für weitere Parameter kuck doch mal hier

                  1. Hallo Daniel,

                    für weitere Parameter kuck doch mal hier

                    Selfphp ist bäh (ist nicht nur meine Meinung). Wenn schon, dann bitte auf
                    http://de.php.net/manual/de/function.date.php
                    verlinken.

                    Da könnte Lisa sogar auch noch weitere nützliche Funtionen zur Kalendererstellung wie z.B. time(), maketime() und checkdate() auf den ersten Blick finden. Die "User Contributed Notes" sind oft auch recht nützlich.

                    Grüsse
                    Frankie

                    1. Hi,

                      vermutlich denke ich mal wieder viel zu kompliziert.
                      Folgendes:

                      Ich habe das heutige Datum. Basis für meinen Kalender. D.h. beim Aufruf rechnen die Funktion, schleifen immer mit dem aktuellen Datum als Basis. Gut. Das stellt kein Problem dar. Ich finde nicht den richtigen Faden.

                      Ich gebe die Tage des akt. Monats im Moment so aus:

                      ..... CODE

                      ...

                      $anzTageMonat = date ("t");

                      for ($i = 1 ; $i <= $anzTageMonat ; $i++){
                        echo $i . "<br>";
                        }

                      .................

                      Soweit alles klar. Die Blätterfunktion des Monats und des Jahres sollte keine Problem sein. Ich finde nur keinen Ansatz mit der Ausgabe der Wochentage zu den einzelnen Tagen. Wie sollte ich denn dabie vorgehen ?

                      Danke Jungs EURE Lisa

                      1. Hallo Lisa,

                        Schön daß Du schon weitergekommen bist mit deinem Kalender.

                        Ich gebe die Tage des akt. Monats im Moment so aus:

                        [...]

                        Soweit alles klar. Die Blätterfunktion des Monats und des Jahres sollte keine Problem sein. Ich finde nur keinen Ansatz mit der Ausgabe der Wochentage zu den einzelnen Tagen. Wie sollte ich denn dabie vorgehen ?

                        Also, ich würde das mit den Wochentagen in etwa so angehen:

                        Diese Variablen mußt Du irgendwo vor der Schleife belegen:

                        $tag = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");

                        $monat = date("m");
                        $jahr = date("Y");

                        $anzTageMonat = date ("t");

                        for ($i = 1 ; $i <= $anzTageMonat ; $i++){

                        echo $i."<br>";

                        # Beispiel 1
                          $wochentag = strftime("%w",(strtotime($jahr."-".$monat."-".$i)));
                          echo $wochentag."<br>";

                        # Beispiel 2
                          $wochentag = date("w", mktime(0, 0, 0, $monat, $i, $jahr));
                          echo $wochentag."<br>";

                        # Für beide Varianten gilt:
                          # Wochentag wird als Dezimalwert zurückgegeben, Sonntag ist 0

                        # Wochentagnamenamen ausgeben:
                          echo $tag[$wochentag]."<br>";

                        echo "<hr>";

                        }

                        Sag bescheid, ob Du mit meinen Vorschlägen was anfangen kannst.

                        Danke Jungs EURE Lisa

                        Hey Mädel, 4:57, jetzt aber ab ins Bett ;-)

                        Grüsse
                        Frankie

                        1. ..

                          $durch = 0;
                            for ($i = 1 ; $i <= $anzTageProMonat ; $i++){

                          $wochentag = date("l", mktime(0, 0, 0, $Monat, $i, $Jahr));

                          echo "<td>" . $i . "</td>\n";
                              $durch++;

                          if ($durch == 7){
                                echo "</tr>\n<tr>\n";
                                $durch = 0;
                                }
                            }

                          ..

                          So erzeuge ich mir jetzt die Tage. Nur wie bekomme ich die Wochentage über die ersten 7 Tage in eine Tabelle?

                          So.

                          Mo Di Mi Do Fr Sa So
                          01 02 03 04 05 06 07
                          08 usw.

                          Vielen Dank.

                          Vielleicht darüber eine 2te Tabelle? Mal probieren!
                          Thx Lisa

                          1. Hallo Lisa, <- das ist eine Begrüssung!

                            So erzeuge ich mir jetzt die Tage. Nur wie bekomme ich die Wochentage über die ersten 7 Tage in eine Tabelle?

                            Du machst eine Tabellenzeile welche Du unabhängig von deiner Schleife, also z.B. vor deiner Schleife, ausgeben lässt. Dieser Zeile enthält dann z.B. 7 Spalten in denen die Wochentage stehen.

                            "Header"-Zeile

                            Mo Di Mi Do Fr Sa So

                            schleife start

                            01 02 03 04 05 06 07
                            08 usw.

                            schleife ende

                            Vielleicht darüber eine 2te Tabelle? Mal probieren!

                            Nein.

                            Grüsse
                            Frankie

                            1. ...
                              <body>
                              <?
                              $aktDatum = date ("d M Y");
                              $anzTageProMonat = date ("t");

                              $Tag = date ("d");
                              $Monat = date ("m");
                              $Jahr = date ("Y");

                              $monate = array ("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
                              $wochentage = array ("Mo","Di","Mi","Do","Fr","Sa","So");

                              ?>
                              <table width="400" border="0">
                                <tr>
                                    <?
                                    for ($x = 1; $x <= 7; $x++){
                                     $wochentag = date("l", mktime(0, 0, 0, $Monat, $x, $Jahr));
                                     echo "<th>" . $wochentag . "</th>";

                              if ($x == 7){
                                       break;
                                     }
                                    }
                                    ?>
                                </tr>
                                <tr>
                                <?
                                $durch = 0;
                                for ($i = 1 ; $i <= $anzTageProMonat ; $i++){

                              echo "<td>" . $i . "</td>\n";
                                  $durch++;

                              if ($durch == 7){
                                    echo "</tr>\n<tr>\n";
                                    $durch = 0;
                                    }
                                }
                                ?>
                                </tr>
                              </table>
                              </body>
                              </html>

                              Danke Frankie. Ich liebe dich! (ironisch) ! Das wars. Ist ja eigentlich ganz keicht, nur der Mensch denkt viel zu kompliziert.
                              Vieln Dank .

                              1. Hallo Lisa,

                                Frankie. Ich liebe dich! (ironisch) !

                                Schade, und dachte schon ich könnte auch mal als Randnotiz in deinem Kalender stehen <:-)

                                *SCNR*.

                                Grüsse
                                Frankie

                              2. Hallo Lisa,

                                auch wenn Du mich nur ironisch (sic!) liebst, gebe ich dir trotzdem noch ein paar kleine Optimierungstipps ,-)

                                <tr>
                                      <?
                                      for ($x = 1; $x <= 7; $x++){
                                       $wochentag = date("l", mktime(0, 0, 0, $Monat, $x, $Jahr));
                                       echo "<th>" . $wochentag . "</th>";

                                if ($x == 7){
                                         break;
                                       }
                                      }
                                      ?>
                                  </tr>

                                Das kostet Rechenzeit, da Du bei jedem Durchlauf date() und mktime() aufrufst. Da die Anzahl der Wochentage auf absehbare Zukunft wahrscheinlich konstant bleibt, schreibe besser:

                                <tr>
                                <?php
                                foreach ($wochentage as $v) {
                                  echo "<th>".$v."</th>";
                                }
                                ?>
                                </tr>

                                $durch = 0;
                                  for ($i = 1 ; $i <= $anzTageProMonat ; $i++){

                                echo "<td>" . $i . "</td>\n";

                                ^^^^
                                Mach hier mal die überflüssigen Leerzeichen weg

                                $durch++;

                                if ($durch == 7){

                                ^^^^
                                Du wechselst die Zeile genau 1 Mal. Ok, weiter unten setzt Du den Wert zurück. Sehe daher meinen Lösungsvorschlag als Alternative an ;-)

                                if ($durch%7 == 0){
                                ^^^^
                                Jetzt wechselst Du die Zeile jedes 7. Mal ohne $durch bei jedem Durchlauf erneut auf 0 zu setzen. Ob meine Variante schneller ist weiß ich nicht, eleganter ist sie aber wahrscheinlich schon.

                                echo "</tr>\n<tr>\n";
                                      $durch = 0;

                                ^^^^
                                das Rücksetzen von $durch kannst Du dir jetzt sparen

                                }

                                Grüsse
                                Frankie

                                1. <tr>
                                  <?php
                                  foreach ($wochentage as $v) {
                                    echo "<th>".$v."</th>";
                                  }
                                  ?>
                                  </tr>

                                  Das hab ich nicht verstanden! foreach läuft durch ein Array von Anfang bis zum Ende. Richtig? Denke ja! So wars ja glaube ich.
                                  Meine Variable $wochentage sieht ja so aus

                                  $wochentage = array ("Mo","Di","Mi","Do","Fr","Sa","So");

                                  nur benutze ich das ja in dem vorherigen Script nicht. LOL
                                  Erklär mir bitte dochmal wie du das meinst.

                                  Danke deine Lisa
                                  *Notiz an mich selbst* Frankie wird als Helfer im Kalender vermerkt. ;)

                                  1. Hallo LISA,

                                    <tr>
                                    <?php
                                    foreach ($wochentage as $v) {
                                      echo "<th>".$v."</th>";
                                    }
                                    ?>
                                    </tr>

                                    Das hab ich nicht verstanden! foreach läuft durch ein Array von Anfang bis zum Ende. Richtig? Denke ja! So wars ja glaube ich.

                                    Ja, in diesem Fall von Sonntag bis Samstag, mehr Tage gibts doch nicht, oder?

                                    Meine Variable $wochentage sieht ja so aus

                                    $wochentage = array ("Mo","Di","Mi","Do","Fr","Sa","So");

                                    nur benutze ich das ja in dem vorherigen Script nicht. LOL
                                    Erklär mir bitte dochmal wie du das meinst.

                                    Doch, das Array $wochentage hast Du doch schon definiert (wenn dein Code so aussieht wie Du ihn gepostet hast). Also nutze es einfach oder lösche es aus deinem Code wenn es dir als überflüssig erscheint.

                                    [aus deinem anderen Posting]
                                    $wochentage = array ("Mo","Di","Mi","Do","Fr","Sa","So");
                                    ^^^
                                    hier ist das Araay
                                    [...]

                                    *Notiz an mich selbst* Frankie wird als Helfer im Kalender vermerkt. ;)

                                    Da bin ich aber mal gespannt (auf die Notiz) ;-)

                                    Grüsse
                                    Frankie

            2. hi,

              Naja, probleme gibts wahrscheinlich bei den Feiertagen. da es da ja
              bewegliche gibt, weis nicht ob die wie das Schaltjahr einem gewissen
              Muster folgen.

              die beweglichen hängen doch (fast?) alle mit ostern zusammen.

              und um zu ermitteln, wann das häschen mit den eiern kommt, gibt es easter_date() bzw. easter_days().

              Fals du das schaltjahrmuster nicht kennst:

              musst du nicht unbedingt selber nach dieser formel rumrechnen, sondern kannst auch date('L') auf einem timestamp aus diesem jahr anwenden.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }