Zur Navigation

Feiertage für die nächsten 2 Jahre

1 webuser

Hallo,
ich will die Feiertage bis Ende des nächsten Jahres ausgeben.
(ab heute).

Das Array muss 2 x durchlaufen werden.
Die Übergabe der Funktion klappt nicht.
   <?php

date_default_timezone_set('Europe/Berlin');


         function rechnen($result) {

        $result = array(
            'Neujahr'                   => mktime(0, 0, 0, 1, 1, $year),
            '1. Advent'                 => $advent,
            '2. Advent'                 => strtotime("+7 day", $advent),
            '3. Advent'                 => strtotime("+14 day", $advent),
            '4. Advent'                 => strtotime("+21 day", $advent),
            'Heiligabend'               => mktime(0, 0, 0, 12, 24, $year),
            '1. Weihnachtsfeiertag'     => mktime(0, 0, 0, 12, 25, $year),
            '2. Weihnachtsfeiertag'     => mktime(0, 0, 0, 12, 26, $year),
            'Silvester'                 => mktime(0, 0, 0, 12, 31, $year),
                  );
       
    return $array
}

        $year = date('Y');
       $start_year = date('Y');
       $end_year = date('Y')+1;
 for($year=$start_year;$year<=$end_year;$year++){
                            $easter = easter_date($year);
                            $advent = strtotime("+1 sunday", mktime(0, 0, 0, 11, 26, $year));
                               
                            asort($rechnen);
                            $heute = time();
                       foreach ($result as $key => $value) {
                                     if ($value > $heute) {echo date('d.m.Y',$value)." ".$key." <br />\n"; }
                                                           }
          }
  ?>

27.12.2017 14:56

2 Jörg

Die Funktion rechnen() benötigt als Input die beiden Variablen $year und $advent. Zurückgegeben wird am Ende $result:

function rechnen($year, $advent) {
    $result = array(
            'Neujahr'                   => mktime(0, 0, 0, 1, 1, $year),
            '1. Advent'                 => $advent,
            '2. Advent'                 => strtotime("+7 day", $advent),
            '3. Advent'                 => strtotime("+14 day", $advent),
            '4. Advent'                 => strtotime("+21 day", $advent),
            'Heiligabend'               => mktime(0, 0, 0, 12, 24, $year),
            '1. Weihnachtsfeiertag'     => mktime(0, 0, 0, 12, 25, $year),
            '2. Weihnachtsfeiertag'     => mktime(0, 0, 0, 12, 26, $year),
            'Silvester'                 => mktime(0, 0, 0, 12, 31, $year)
    );
    return $result;
}

Der spätere Aufruf sollte dann entsprechend so ausschauen:

$result = asort(rechnen($year, $advent));

Das Ergebnis muss $result zugeordnet werden, da du das Array unter diesem Namen in der folgenden Schleife weiterverarbeitest.

Funktionen kapseln die enthaltenen Daten, deswegen sind $result innerhalb und außerhalb von rechnen() zwei verschiedene Variablen.

27.12.2017 15:56 | geändert: 27.12.2017 16:00

3 webuser

Hallo,
danke für die Erklärung, aber es pasiert nichts...
<?php
function rechnen($year, $advent) {
    $result = array(
            'Neujahr'                   => mktime(0, 0, 0, 1, 1, $year),
            '1. Advent'                 => $advent,
            '2. Advent'                 => strtotime("+7 day", $advent),
            '3. Advent'                 => strtotime("+14 day", $advent),
            '4. Advent'                 => strtotime("+21 day", $advent),
            'Heiligabend'               => mktime(0, 0, 0, 12, 24, $year),
            '1. Weihnachtsfeiertag'     => mktime(0, 0, 0, 12, 25, $year),
            '2. Weihnachtsfeiertag'     => mktime(0, 0, 0, 12, 26, $year),
            'Silvester'                 => mktime(0, 0, 0, 12, 31, $year)
    );
    return $result;
}

       $year = date('Y');
       $start_year = date('Y');
       $end_year = date('Y')+1;
 for($year=$start_year;$year<=$end_year;$year++){
                            $easter = easter_date($year);
                            $advent = strtotime("+1 sunday", mktime(0, 0, 0, 11, 26, $year));

                       $result = asort(rechnen($year, $advent));
                       $heute = time();
                       foreach ($result as $key => $value) {
                                     if ($value > $heute) {echo date('d.m.Y',$value)." ".$key." <br />\n"; }
                                                           }
          }
  ?>

Könnte man nicht die Variable
$advent oben in die Funktion mit reinnehmen, dann
braucht man die nicht übergeben?

<?php
function rechnen($year) {
     $advent = strtotime("+1 sunday", mktime(0, 0, 0, 11, 26, $year));

    $result = array(
            'Neujahr'                   => mktime(0, 0, 0, 1, 1, $year),
            '1. Advent'                 => $advent,
usw......
dann unten
$result = asort(rechnen($year));

27.12.2017 16:45

4 Jörg

Ja, $advent kann auch in der Funktion berechnet werden, so dass nur $year übergeben werden muss.

$result = asort(rechnen($year));

Da hatte ich nicht bedacht, dass asort() kein Array zurückgibt, sondern im Erfolgsfall true.

Probier mal stattdessen so:

$result = rechnen($year);
asort($result);

27.12.2017 17:48 | geändert: 27.12.2017 17:48

1 Forenmitglied fand diesen Beitrag gut

5 webuser

Danke Jörg,
perfekt.

Gruß
Webuser

27.12.2017 22:22

Beitrag schreiben (als Gast)

Beim Verfassen des Beitrages bitte die Forenregeln beachten.





[BBCode-Hilfe]