Stefan Gebhardt: Osterdatum ermitteln und grafik ausgeben

hi,

ich hab Grade ein nettes Problem.
Ich würde gerne das osterdatum ermitteln, und auf Grund dessen, dann eine oder mehrere Grafiken ausgeben.

leider komm ich nicht dahinter, wie ich das am besten anstellen könnte. Vor allem unter dem Gesichtspunkt, das es Fehler und wartungsfrei bis in fast alle Ewigkeit funktionieren sollte.

bis jetzt hab ich folgenden, natürlich total falschen code in der Seite:

<? $monat = date("n"); $tag = date("d"); if ( $monat == "4" && $tag <= "9" && $tag >= "6" ) { echo "<img src='images/o_linie4.gif' /><br /><br />"; } ?>

das funktioniert für feste Feiertage wie Weihnachten in der art ganz prima.. nur für Ostern eben nicht.

wäre froh, wenn mir jemand auf die sprünge helfen könnte.

Vielen dank

  1. Hi Stefan,

    das funktioniert für feste Feiertage wie Weihnachten in der art ganz prima.. nur für Ostern eben nicht.

    Stimmt, das Datum für Ostern zu berechnen ist in der Tat etwas schwierig:

    Ostern wird immer am Sonntag nach dem ersten Frühjahrsvollmond gefeiert und fällt
      daher – bei der Berechnung mittels des Gregorianischen Kalenders – frühestens auf
      den 22. März und spätestens auf den 25. April.                        [Wikipedia]

    Ohne einen Mond-Kalender kommst du also nicht weit. Aus diesem Grund würde ich dir
    auch dringend empfehlen, auf fertige Funktionen zurückzugreifen, wenn du das Datum
    von Ostern ermitteln willst.

    PHP bringt dafür die Calendar-Extension mit. Mit der Funktion easter_date() solltest
    du an das gewünschte Datum in Form eines Timestamps kommen.

    Viele Grüße,
      ~ Dennis.

    1. Hi Stefan,
      PHP bringt dafür die Calendar-Extension mit. Mit der Funktion easter_date() solltest
      du an das gewünschte Datum in Form eines Timestamps kommen.

      hi dennis

      ja ich weiss, die frage ist dann nur, wie ichs verwenden könnte, um damit die anzeige der grafiken zu steuern *grübel*

      mfg
      stefan

      1. Hallo,

        ja ich weiss, die frage ist dann nur, wie ichs verwenden könnte, um damit die anzeige der grafiken zu steuern *grübel*

          
        <?php  
        if(date("d.m.Y") == date("d.m.Y", easter_date(date("Y")))) {  
        echo "<img src='ostern.jpg' alt='Ostern'>";  
        }  
        else  
        {  
        echo "<img src='keineostern.jpg' alt='Keine Ostern'>";	  
        }  
        ?>  
        
        

        Hätte ich etwa so gelöst. (Noch nicht ausprobiert!)

        Lg pankraz

        1. Hallo,

          »» ja ich weiss, die frage ist dann nur, wie ichs verwenden könnte, um damit die anzeige der grafiken zu steuern *grübel*

          <?php
          if(date("d.m.Y") == date("d.m.Y", easter_date(date("Y")))) {
          echo "<img src='ostern.jpg' alt='Ostern'>";
          }
          else
          {
          echo "<img src='keineostern.jpg' alt='Keine Ostern'>";
          }
          ?>

          
          >   
          > Hätte ich etwa so gelöst. (Noch nicht ausprobiert!)  
          >   
          > Lg pankraz  
            
          hi Pankraz,  
            
          schaut ja schonmal so ganz schick aus, und ein test in xammp den ich mir doch mal erlaubt habe, schaut auch so ganz prima aus..  
            
          einzig das else bräuchte ich nicht, und es müsste eine möglichkeit geben, die grafik von nicht nur wärend ostersonntag sondern schon ab freitag bis montag anzeigen zu lassen.. also den kompletten zeitraum von ostern.  
            
          Aber du hast mir damit schon recht gut geholfen.  
            
          Ein anderes Problem ist ein bekannter bug in `easter_date();`{:.language-php} sowie das diese funktion ja nur bis 2037 anzeigt, die seite allerdings wartungsfrei bleiben soll solang sie existiert.. und ich rechne da einfach mal mit mindestens 2050 wenn bis dahin nicht das internet schon lang nicht mehr existent is \*G\*  
            
          Ich sollte vielleicht den hintergrund ergänzen.. es dreht sich hier um den webauftritt meiner mutter, kleine private seite über katzen.. sie möcht einfach sesonal da n banner mit ostereiern und n hasen drauf haben bzw. zu weihnachten schneits auf der seite ;)  
            
          ebenso lasse ich auf ihren wunsch hin, ihr alte dynamisch berechnen, so das die seite eig. im zustand wie sie grade ist total wartungsfrei.  
          Immerhin soll die seite solang online sein, bis sie niemand mehr (sie und auch ich werden wohl irgendwann mal nicht mehr sein) bezahlt.  
            
          vielen dank
          
          1. Hallo,

            einzig das else bräuchte ich nicht, und es müsste eine möglichkeit geben, die grafik von nicht nur wärend ostersonntag sondern schon ab freitag bis montag anzeigen zu lassen.. also den kompletten zeitraum von ostern.

              
            <?php  
            $ostern = date("d.m.Y", easter_date(date("Y")));  
            $karfreitag = date("d.m.Y", strtotime("$ostern -2 day"));  
            $ostersamstag = date("d.m.Y", strtotime("$ostern -1 day"));  
            $ostersonnatg = date("d.m.Y", easter_date(date("Y")));  
            $ostermontag = date("d.m.Y", strtotime("$ostern +1 day"));  
              
            if(date("d.m.Y") == $karfreitag || date("d.m.Y") == $ostersamstag || date("d.m.Y") == $ostersonnatg || date("d.m.Y") == $ostermontag)  
            {  
            echo "<img src='ostern.jpg' alt'ostern' />";  
            }  
            ?>  
            
            

            Ein anderes Problem ist ein bekannter bug in easter_date(); sowie das diese funktion ja nur bis 2037 anzeigt, die seite allerdings wartungsfrei bleiben soll solang sie existiert.. und ich rechne da einfach mal mit mindestens 2050 wenn bis dahin nicht das internet schon lang nicht mehr existent is *G*

            Da kann ich dir leider nicht weiterhelfen. Da müsstes du eine andere Funktion für das Osterdatum benützen.

            Lg pankraz

            1. Hallo,

              »» einzig das else bräuchte ich nicht, und es müsste eine möglichkeit geben, die grafik von nicht nur wärend ostersonntag sondern schon ab freitag bis montag anzeigen zu lassen.. also den kompletten zeitraum von ostern.

              <?php
              $ostern = date("d.m.Y", easter_date(date("Y")));
              $karfreitag = date("d.m.Y", strtotime("$ostern -2 day"));
              $ostersamstag = date("d.m.Y", strtotime("$ostern -1 day"));
              $ostersonnatg = date("d.m.Y", easter_date(date("Y")));
              $ostermontag = date("d.m.Y", strtotime("$ostern +1 day"));

              if(date("d.m.Y") == $karfreitag || date("d.m.Y") == $ostersamstag || date("d.m.Y") == $ostersonnatg || date("d.m.Y") == $ostermontag)
              {
              echo "<img src='ostern.jpg' alt'ostern' />";
              }
              ?>

              
              >   
                
              Vielen dank, werd ich gleich mal so testen,  
              ich hatte mir nun sowas zusammen gebaut, weils mir logisch erschien, funktioniert nur nicht \*G\*  
                
              ~~~php
              <?php  
              if (date ( "d.m.Y" ) == mktime ( 0, 0, 0, date ( "m", easter_date ( date ( "Y" ) ) ), date ( "d", easter_date ( date ( "Y" ) ) ) - 1, date ( "Y", easter_date ( date ( "Y" ) ) ) ) || date ( "d.m.Y" ) == mktime ( 0, 0, 0, date ( "m", easter_date ( date ( "Y" ) ) ), date ( "d", easter_date ( date ( "Y" ) ) ), date ( "Y", easter_date ( date ( "Y" ) ) ) ) || date ( "d.m.Y" ) == mktime ( 0, 0, 0, date ( "m", easter_date ( date ( "Y" ) ) ), date ( "d", easter_date ( date ( "Y" ) ) ) + 1, date ( "Y", easter_date ( date ( "Y" ) ) ) ) || date ( "d.m.Y" ) == mktime ( 0, 0, 0, date ( "m", easter_date ( date ( "Y" ) ) ), date ( "d", easter_date ( date ( "Y" ) ) ) + 2, date ( "Y", easter_date ( date ( "Y" ) ) ) )) {  
              	echo "es ist ostern";  
              } else  
              	echo "es ist nicht ostern";  
                
              ?>
              

              »» Ein anderes Problem ist ein bekannter bug in easter_date(); sowie das diese funktion ja nur bis 2037 anzeigt, die seite allerdings wartungsfrei bleiben soll solang sie existiert.. und ich rechne da einfach mal mit mindestens 2050 wenn bis dahin nicht das internet schon lang nicht mehr existent is *G*

              Da kann ich dir leider nicht weiterhelfen. Da müsstes du eine andere Funktion für das Osterdatum benützen.

              »»

              bei php.net in den kommentaren liegen einige alternative aufbauten wie man das berechnen könnte, wenn ichs brauch, tausch ich die funktion einfach aus.
              allerdings wirds sicher erstmal mit easter_date genügen. Ich glaub nicht dran, das ich oder meine mutter 2037 überleben.. wenn ich so rechne.. ich bin jetz 25.. dann wär ich 2037 *rechne* mh ok 53.. naja mit 50 muss ich mir also nochmal was einfallen lassen *G* egal.. lassen wirs erstmal so.. ich frag mal bei php.net an ob man das nich verlängern könnt *G*

              »»

              Lg pankraz

              mfg
              stefan

              1. Hallo

                ... ich frag mal bei php.net an ob man das nich verlängern könnt *G*

                Die konkrete Berechnung beruht auf dem Unix-Timestamp. Dessen Wertebereich ist 2032 aufgebraucht, da kannst du bei PHP nachfragen, wie du willst. Man sollte aber davon ausgehen können, dass es rechtzeitig Ersatz geben wird. Ist ja noch ein wenig Zeit bis dahin.

                Tschö, Auge

                --
                Die deutschen Interessen werden am Liechtenstein verteidigt.
                Veranstaltungsdatenbank Vdb 0.3
                1. Hallo

                  »» ... ich frag mal bei php.net an ob man das nich verlängern könnt *G*

                  Die konkrete Berechnung beruht auf dem Unix-Timestamp. Dessen Wertebereich ist 2032 aufgebraucht, da kannst du bei PHP nachfragen, wie du willst. Man sollte aber davon ausgehen können, dass es rechtzeitig Ersatz geben wird. Ist ja noch ein wenig Zeit bis dahin.

                  Tschö, Auge

                  jo danke, versuchen die herren und damen anzuregen, das sie sich jetzt um das problem aber schonmal gedanken machen, kann man ja mal, fals das nicht schon lang so ist.

                  btw. such ich grad für den wundervollen code von pankraz eine möglichekeit, ihn evtl. zwecks rechenzeit und platzersparnis, ihn in einer externen datei als function unterzubringen, da ich sonst den code in jede datei packen muss, so oft wie da ein osterbild an ensprechenden stellen (unterschidlichen zeilen) angezeigt werden soll.

                  das wäre wie gesagt a) etwas rechenlastig aber viel wichtiger b) nicht sehr wartungsfreundlich und viel arbeit, wenn sich am code nochmal was ändern sollte, da ich dann alle stellen, an denen der code steht, 100 fach rumeditieren darf um die änderung überall zu machen.

                  na ich komm schon noch auf ne lösung.
                  Danke euch allen schonmal für die nette hilfe, besonders pankraz fürs schreiben des ganzen. :)

                  mfg
                  stefan

                  1. Hallo

                    btw. such ich grad für den wundervollen code von pankraz eine möglichekeit, ihn evtl. zwecks rechenzeit und platzersparnis, ihn in einer externen datei als function unterzubringen ...

                    Na denn tu das doch, das mit der Funktion.

                    Tschö, Auge

                    --
                    Die deutschen Interessen werden am Liechtenstein verteidigt.
                    Veranstaltungsdatenbank Vdb 0.3
                    1. Hallo

                      »» btw. such ich grad für den wundervollen code von pankraz eine möglichekeit, ihn evtl. zwecks rechenzeit und platzersparnis, ihn in einer externen datei als function unterzubringen ...

                      Na denn tu das doch, das mit der Funktion.

                      Tschö, Auge

                      Vielen lieben dank auge, für die hilfe (-.-) - ich versuch das bereits den ganzen tag lang.. naja.. hab ja nu n jahr zeit bis wieder ostern ist.. also eilt das ja alles nicht :)

                      tschüss und nochmal danke allen, die geholfen haben.

                      1. Hallo

                        »» »» btw. such ich grad für den wundervollen code von pankraz eine möglichekeit, ihn evtl. zwecks rechenzeit und platzersparnis, ihn in einer externen datei als function unterzubringen ...
                        »»
                        »» Na denn tu das doch, das mit der Funktion.

                        Vielen lieben dank auge, für die hilfe (-.-) - ich versuch das bereits den ganzen tag lang.. naja.. hab ja nu n jahr zeit bis wieder ostern ist.. also eilt das ja alles nicht :)

                        Nu mach mal halblang.

                        1. Wie eine Funktion definiert wird, wirst du ja wohl wissen.
                        2. Wie man einer Funktion Daten als Parameter übergibt, wirst du ja wohl wissen.
                        3. Wie man einen Wert aus der Funktion heraus an den umgebenden Code ausgibt, wirst du ja wohl wissen.

                        Das sind die drei Dinge, die du wissen solltest, um selbst Funktionen zu definieren. Woran hapert's nun?

                        Tschö, Auge

                        --
                        Die deutschen Interessen werden am Liechtenstein verteidigt.
                        Veranstaltungsdatenbank Vdb 0.3
                          1. Wie man einen Wert aus der Funktion heraus an den umgebenden Code ausgibt, wirst du ja wohl wissen.

                          Das sind die drei Dinge, die du wissen solltest, um selbst Funktionen zu definieren. Woran hapert's nun?

                          Tschö, Auge

                          hi,

                          ja punkt 1 weiss ich, punkt 2 nicht, brauch ich in dem fall aber auch nicht, da daß jahr als einziger parameter, sich selbst über date("Y") stellt.

                          Hapern tuts an punkt 3.. wie ich es hinbekomme, das da n auswertbarer wert auskommt, den ich mit if abfragen kann.. aber ich werd wohl morgen nochmal google bemühen.. irgendwo musses ja beispiele geben..

                          ich habs nich wirklich gern, wenn mir jemand was fertig kaut.. allerdings anregungen und vorgekautes nehm ich immer gern - wenn du verstehst was ich mein ;)

                          mfg und n8 für heute
                          stefan

          2. @@Stefan Gebhardt:

            Ein anderes Problem ist ein bekannter bug in easter_date(); sowie das diese funktion ja nur bis 2037 anzeigt

            Ich weiß nicht, wie easter_date() implementiert ist, aber „[d]ie Gaußsche Osterformel gilt für beliebige Kalenderjahre nach dem Julianischen und dem Gregorianischen Kalender […] solange die kirchlichen Regeln für die Festlegung des Osterdatums nicht geändert werden, auch wenn in manchen Darstellungen durch begrenzte Tabellen der Eindruck erweckt wird oder entstehen kann, die Gültigkeit sei auf bestimmte Jahre beschränkt.“ [Wikipedia]

            Und im Übrigen verweist die Beschreibung von easter_date() auf die Funktion easter_days().

            Live long and prosper,
            Gunnar

            --
            Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)