Sigge: Feiertag mit wechselndem Datum vorher deffinieren

An dem Tag, an dem in Skandinavien Mittsommerabend ist soll ein Text angezeigt werden.
Das habe ich so gelöst:
<?php
// der darauffolgende Sa. liegt zwischen dem 21.06.-27.06 (der Freitag liegt innerhalb der Tage 170-176)

$mits    = 170 + date(L); //plus Schaltjahrfaktor
if((date(z) >= $mits) && (date(z) <= ($mits + 6)) && (date(w) == 5)){
    echo "einen schönen Mittsommer-Abend";
}
?>

Wie aber muß es aussehen, wenn ich diesen Tag schon zu Beginn des Jahres angeben möchte???

Würde mich über eure Hilfe freuen

  1. An dem Tag, an dem in Skandinavien Mittsommerabend ist soll ein Text angezeigt werden.
    Das habe ich so gelöst:
    <?php
    // der darauffolgende Sa. liegt zwischen dem 21.06.-27.06 (der Freitag liegt innerhalb der Tage 170-176)

    $mits    = 170 + date(L); //plus Schaltjahrfaktor
    if((date(z) >= $mits) && (date(z) <= ($mits + 6)) && (date(w) == 5)){
        echo "einen schönen Mittsommer-Abend";
    }
    ?>

    Wie aber muß es aussehen, wenn ich diesen Tag schon zu Beginn des Jahres angeben möchte???

    Dein Problem verstehe ich nicht wirklich. Entweder verwendest du eine universelle Berechnung, die immer gilt, egal ob es gerade mitten im Jahr oder am Jahresbeginn ist, oder du gibst zu jedem Jahresbeginn ein festes Datum an und vergleichst dieses mit dem aktuellen.
    Momentan verwendest du erstere Methode (auch wenn mir das mit dem Schaltjahrgedöns nicht gefällt), willst du lieber letztere benutzen, dann mache das.

    Wo ist also das Problem?

    1. Dein Problem verstehe ich nicht wirklich. Entweder verwendest du eine universelle Berechnung, die immer gilt, egal ob es gerade mitten im Jahr oder am Jahresbeginn ist, oder du gibst zu jedem Jahresbeginn ein festes Datum an und vergleichst dieses mit dem aktuellen.

      Mein Problem ist festzustellen welches Datum der Freitag nach dem 170. Tag (im Schaltjahr der 171.) bzw. nach dem 20.06. des Jahres  hat, ohne jährlich das Datum manuell einzugeben. Das Ganze soll letzendlich für mehrere bewegliche Feiertage gemacht werden.

      Momentan verwendest du erstere Methode (auch wenn mir das mit dem Schaltjahrgedöns nicht gefällt), willst du lieber letztere benutzen, dann mache das.

      Wo ist also das Problem?

      1. Mein Problem ist festzustellen welches Datum der Freitag nach dem 170. Tag (im Schaltjahr der 171.) bzw. nach dem 20.06. des Jahres  hat, ohne jährlich das Datum manuell einzugeben.

        Und was hast du an den Beispielen mit date() und mktime() im Manual von PHP nicht verstanden?

        1. Und was hast du an den Beispielen mit date() und mktime() im Manual von PHP nicht verstanden?

          for($i=170, $i<=176, $i++)
            if ($i-Wochentag == Freitag){
              echo "Freitag der $i. ist Mittsommerabend";
            }
          }

          Das will ich im Prinzip erreichen nur weiß ich nicht was logisch für $i-Wochentag stehen muss!!

          1. Und was hast du an den Beispielen mit date() und mktime() im Manual von PHP nicht verstanden?

            hab's geschnallt, danke für eure Bemühungen.

      2. Hi,

        Mein Problem ist festzustellen welches Datum der Freitag nach dem 170. Tag (im Schaltjahr der 171.) bzw. nach dem 20.06. des Jahres  hat

        echo date('r', strtotime('06/20 next friday'));

        (Wenn der 20.6. auf einen Freitag fallen sollte, und du dann diesen statt dem Freitag in der drauffolgenden Woche haben willst, dann entfällt das 'next'.)

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. echo date('r', strtotime('06/20 next friday'));

          (Wenn der 20.6. auf einen Freitag fallen sollte, und du dann diesen statt dem Freitag in der drauffolgenden Woche haben willst, dann entfällt das 'next'.)

          MfG ChrisB

          Danke, das ist schon mal ein Ansatz der weiter helfen sollte :-))

      3. welches Datum der Freitag nach dem 170. Tag (im Schaltjahr der 171.) bzw. nach dem 20.06. des Jahres  hat

        Dieser eine Satz hätte als Fragestellung gereicht - manche Dinge können so einfach sein :)

        getdate() liefert dir den Wochentag als Wert zwischen 0 (Sonntag) und 6 (Sonnabend). Berechne mit getdate() den Wochentag des 21.6. und addiere entsprechend:

        Tag  Wert  Zum Datum zu addieren, um auf nächsten Freitag zu kommen
         So    0   +5
         Mo    1   +4
         Di    2   +3
         Mi    3   +2
         Do    4   +1
         Fr    5    0
         Sa    6   +6

        $uhr = getdate(); // dieses Jahr ermitteln  
          
        $ticktack = mktime(12, 0, 0, 6, 21, $uhr["year"]); // Ticks für 21.6. dieses Jahres ermitteln  
        $uhr = getdate($ticktack); // aus Ticks den Wochentag für 21.6. ermitteln  
          
        if ($uhr["wday"] < 5) { // falls 21.6. Sonntag (0) bis Donnerstag (4)  
            $mittsommer = 21 + (5 - $uhr["wday"]);  
        }  
        else if ($uhr["wday"] > 5) { // falls 21.6. Sonnabend (6)  
            $mittsommer = 21 + 6;  
        }  
        else if ($uhr["wday"] == 5) { // 21.6. ist Freitag  
            $mittsommer = 21;  
        }  
          
        echo "Mittsommer fällt dieses Jahr auf Freitag, den " . $mittsommer . ". Juni.";
        

        So in der Art, das ist jetzt des besseren Verständnisses halber _sehr_ ausführlich gehalten.