Kalender inklusive Feiertage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kalender inklusive Feiertage

    Hi Leute,

    ich habe folgendes Problem. Ich habe einen Kalender geschrieben. Der gibt die Tage des aktuellen Monats in einer While-Schleife aus. Damit ich die Feiertage berücksichtigen kann, habe ich diese in eine Datenbank geschrieben, also Feiertag -- Montag -- Tag. Diese Datenbankeinträge werden bei jedem Aufruf des Kalenders neu berechnet und in die Datenbank geschrieben.

    Innerhalb der While-Schleife, die die Tage ausgibt, prüfe ich, ob in der Feiertags-Tabelle ein Eintrag mit dem aktuellen Tag und Monat gefunden wird. Wenn ja, ist der gerade auszugebende Tage ein Feiertag, sonst nicht.

    Nur kann es folgendes Problem geben. Wenn zwei Leute genau im gleichen Moment den Kalender für 2 verschiedene Jahre aufrufen, hat z.B. Benutzer 1 gerade die Feiertage für 2004 aktualisiert und Benutzer 2 bekommt dann trotz 2005 die Feiertag von 2004, weil die Datenbank anscheinend nicht so schnell reagiert. Daher möchte ich das mit Arrays lösen, habe aber keinen genauen Ansatz, wie ich das machen soll:

    PHP-Code:
    $feiertage_array = array();
    $feiertage_array["Ostermontag"] = "$easter_monday_day""$easter_monday_month"
    Nun habe ich also im Array "Ostermontag" im 1. Eintrag den Tag und im 2. Eintrag den Monat. Wie soll ich jetzt abprüfen, ob der aktuelle Tag ein Feiertag ist oder nicht?

    Ich habe insgesamt 13 Feiertage berücksichtigt, aber nur 4 davon sind variabel. Natürlich könnte ich es ganz primitiv mit 4 If-Schleifen machen, aber vielleicht gibt es auch eine professionellere Methode ?!?

    Danke für jede Hilfe!

    Grüße Lukas

  • #2
    wenn du die feiertage in der datenbank hast, dann kannst du das doch gleich im SELECT abfragen oder?

    und warum ändern benutzer deine feiertage?

    es gibt ein paar feste tage und der rest lässt sich ausrechnen, da muss man dochnichts in der datenbank rumändern
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      @mrhappiness

      Naja, also: Angenommen wir beide greifen auf den Kalender zu. Du hast den April 2004 gewählt und hast am 12. April den Feiertag "Ostermontag" eingetragen. Ich habe aber den April 2005 ausgewählt und habe somit am 12. April keinen Feiertag, weil der Ostermontag 2005 schon im März war. Jetzt hast du aber gerade den Kalender mit 2004 aufgerufen und somit hast du in Datenbank mit deinem Aufruf alle Feiertage für 2004 angepasst. Wenn wir nun genau gleichzeit (ich weiß, dass es unrealistisch ist) den Kalender aufrufen, kann es passieren, dass ich die Feiertage von 2004 auslese, obwohl ich 2005 gewählt habe.

      Ich weiß zwar nicht wieso, aber es ist möglich Daher würde ich das gerne in Arrays schreiben, die sind dann nämlich wirklich nur für den Benutzer, der gerade den Kalender benutzt!

      Danke, Lukas

      Kommentar


      • #4
        Ichversteh's immer noch nicht, aber eventuell hilft's ja, wenn du die Tabellen vorher LOCKst und nachher UNLOCKst?

        Wenn ich ein UPDATE mache WHERE datum = 2004-04-12 warum siehst du das dann wenn du ausliest WHERE YEAR(datum) 2005?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Okay, also bisher hatte ich es so, dass ich kein Jahr vergeben hatte, weil mich ja nur die Feiertage des aktuellen Jahres gefragt waren. Das Jahr habe ich jetzt hinzugefügt, aber jetzt habe ich wieder ein Problem.

          Wenn du wiederum die Feiertage für 2004 aufrufst und ich für 2005, dann stehen möglicherweise immer noch die Feiertage mit Jahr 2004 drinnen, also finde ich für 2005 keine Feiertage (--> WHERE jahr = '2005')! Und wenn ich sie gleich update, dann überschreibe ich vielleicht wiederum deine!

          Danke für deine Hilfe!!!

          Greetz Lukas

          Kommentar


          • #6
            @skalu: und warum rechnest du die Feiertage nicht aus, anstatt einzugeben?

            Kommentar


            • #7
              wie soll ich denn deine feiertage überschreiben (im sinne von verändern) können?

              wenn 2004 ostersonnatg der 12. april war, warum sollten wir dann unterschiedliche werte für ostersonntag 2004 eintragen?
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Original geschrieben von mrhappiness
                wenn 2004 ostersonnatg der 12. april war, warum sollten wir dann unterschiedliche werte für ostersonntag 2004 eintragen?
                OffTopic:
                weil er vielleicht 'ne andere Definition von Ostersonntag hat

                Kommentar


                • #9
                  OffTopic:
                  warum?
                  das ist ganz eindeutig der sonntag nach dem sonntag vor ostersonntag


                  bei nicht bundeseinheitlichen feiertagen (allerheiligen und so) würd ich die sorge ja verstehen, aber da sollte man mit einer checkbox "geändert" vor jedem tag abilfe schaffen können
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    OffTopic:
                    nicht ganz, das ist der Sonntag vor dem Sonntag nach dem Ostermontag und das sieht so aus in ASP
                    Code:
                    Function GetEasternSunday(dtYear)
                    	
                    	Dim D
                    	D = (((255 - 11 * (dtYear Mod 19)) - 21) Mod 30) + 21
                    	GetEasternSunday = DateSerial(dtYear, 3, 1) + D + (D > 48) + 6 - _
                    ((dtYear + dtYear \ 4 + D + (D > 48) + 1) Mod 7)
                    	 
                    End Function

                    Zuletzt geändert von asp2php; 17.08.2004, 12:03.

                    Kommentar


                    • #11
                      OffTopic:
                      brich deinen code um, du denkst wohl nur weil du mod bist gelten für dich andere regeln...
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12

                        Kommentar


                        • #13
                          Original geschrieben von asp2php
                          @skalu: und warum rechnest du die Feiertage nicht aus, anstatt einzugeben?
                          Natürlich rechne ich die Feiertage aus! Wie sollte ich sie denn dann in der Datenbank updaten?

                          z.B.

                          PHP-Code:
                          // Pfingstmontag: Ostern + 50 Tage
                          $pfingstmontag $easter+4320001;
                          $pfingstmontag_day date("d"$pfingstmontag);
                          $pfingstmontag_month date("m"$pfingstmontag);

                          $update_pfingstmontag "UPDATE $tablename_holiday
                           SET holiday_day = '
                          $pfingstmontag_day', 
                          holiday_month = '
                          $pfingstmontag_month
                          WHERE holiday_name = 'Pfingstmontag'"
                          ;
                          $result_pfingstmontag mysql_query($update_pfingstmontag) or die(mysql_error()); 
                          Original geschrieben von mrhappiness
                          wenn 2004 ostersonnatg der 12. april war, warum sollten wir dann unterschiedliche werte für ostersonntag 2004 eintragen?
                          Eh nicht beide. Du hast 2004 gewählt und somit ist der 12. April bei dir ein Feiertag. Jetzt rufe ich aber zeitgleich den April 2005 auf und bekomme manchmal die Feiertrage vom April 2004 in den Kalender vom April 2005. Wie das geht ist mir eh nicht ganz klar, da ja jede Anfrage nacheinander abgearbeitet werden müsste...

                          Greetz Lukas
                          EDIT:
                          Umbruch by asp2php.
                          Zuletzt geändert von asp2php; 17.08.2004, 13:18.

                          Kommentar


                          • #14
                            Original geschrieben von skalu
                            Natürlich rechne ich die Feiertage aus! Wie sollte ich sie denn dann in der Datenbank updaten?
                            und warum sollen sie in die DB rein

                            Kommentar


                            • #15
                              Original geschrieben von skalu
                              Du hast 2004 gewählt und somit ist der 12. April bei dir ein Feiertag. Jetzt rufe ich aber zeitgleich den April 2005 auf und bekomme manchmal die Feiertrage vom April 2004 in den Kalender vom April 2005. Wie das geht ist mir eh nicht ganz klar[/EDIT]
                              mir auch nicht, wie fragst du denn ab?

                              wie sieht ein beispieldatensatz aus?
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X