Zum Inhalt springen

Feiertagsbestimmung


Empfohlene Beiträge

Was für Feiertage hast du denn da im Sinn?

Es gibt im Prinzip zwei Arten:

1. Die mit festem Datum; du müsstest du dir sowas wie eine Liste erstellen und prüfen, ob dein Datum da drin ist.

2. Feiertage die nach einem festen Algorithmus berechnet werden (typisch hierfür: Ostern, Pfingsten (soundsoviel nach Ostern) und Christi Himmelfahrt (soundsoviel nach Pfingsten). Für die Bestimmung von Ostern beitet php die Funktion easter_date(int year). Dafür müssen aber die Kalender-Funktionen verfügbar sein. Ausserdem arbeitet die Funktion mit einem Timestamp, unterliegt also den typischen Beschränkungen/ Problemen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Enrico,

danke für die Antwort!

Ich habe mir folgende Methode geschrieben:


function isHoliday()
{
$day = date( "d", $this->iTimeStamp);
$month = date( "m", $this->iTimeStamp);
$year = date( "Y", $this->iTimeStamp);

$aFixedHolidays = array(
"Neujahr" => array( "day" => 1, "month" => 1, "year" => null),
"Maifeiertag" => array( "day" => 1, "month" => 5, "year" => null),
"Tag der Deutschen Einheit" => array( "day" => 1, "month" => 5, "year" => "<=1990"),
"Tag der Deutschen Einheit" => array( "day" => 3, "month" => 10, "year" => ">1990"),
"Allerheiligen" => array( "day" => 1, "month" => 11, "year" => null),
// "Heilig Abend" => array( "day" => 24, "month" => 12, "year" => null),
"1. Weihnachtsfeiertag" => array( "day" => 25, "month" => 12, "year" => null),
"2. Weihnachtsfeiertag" => array( "day" => 26, "month" => 12, "year" => null),
// "Silvester" => array( "day" => 31, "month" => 12, "year" => null),
"Neujahr" => array( "day" => 1, "month" => 1, "year" => null),
"Maria Himmelfahrt" => array( "day" => 15, "month" => 8, "year" => null),
"Hl. 3 Könige" => array( "day" => 6, "month" => 1, "year" => null),
);

foreach ( $aFixedHolidays as $aHoliday) {
if ( $day == $aHoliday["day"] && $month == $aHoliday["month"]) {
if ( is_null ( $aHoliday["year"])) {
return true;
} else {
// echo "EVAL: if ( \$year". $aHoliday["year"] .") return true; <br>";
eval ( "if ( \$year". $aHoliday["year"] .") return true;");
}
}
}

/* -Buß-und Bettag ist eine Ausnahme UND Z.ZT kein Feiertag mehr!!!
man nimmt den 26.11. und sucht den letzten Sonntag davor, falls der 26.11. ein Sonntag ist nimmt man diesen Tag als Sonntag,
der Mittwoch vor diesen Sonntag den man errechnet hat ist der Buß- und Bettag */

// zeigt wieviel tage nach dem 21.3 Ostern ist
$iHolidayValue = easter_days( $year);
$iEastern = $iHolidayValue + 21;

// variable Feiertage
$aVariableHolidays = array(
"Osternsonntag" => mktime(0, 0, 0, 3 , $iEastern, $year),
"Karfreitag" => mktime(0, 0, 0, 3 , $iEastern - 2, $year),
"Ostermontag" => mktime(0, 0, 0, 3 , $iEastern + 1, $year),
"Pfingstsonntag" => mktime(0, 0, 0, 3 , $iEastern + 49, $year),
"Pfingstmontag" => mktime(0, 0, 0, 3 , $iEastern + 50, $year),
"ChrHimmelfahrt" => mktime(0, 0, 0, 3 , $iEastern + 39, $year),
"Fronleichnam" => mktime(0, 0, 0, 3 , $iEastern + 60, $year)
);

foreach ( $aVariableHolidays as $iHoliday) {
if ( $iHoliday == $this->iTimeStamp) return true;
}

return false;
}

[/PHP]

PS: Die auskommentierten Feiertage sind nur "deaktiviert", weil in unserer Firma an diesen gearbeitet wird!

Habe ich einen Feiertag vergessen?

:marine

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm, vielleicht ein bischen kürzer:


$iYear = date("Y");
$arHolidays["01.01.".$iYear] = "Neujahr";
$arHolidays["06.01.".$iYear] = "Dreikönigstag";
$arHolidays["01.05.".$iYear] = "Tag der Arbeit";
$arHolidays["15.08.".$iYear] = "Mariä Himmelfahrt"; #in manchen Bundeslaendern kein Feiertag
$arHolidays["03.10.".$iYear] = "Tag der deutschen Einheit";
$arHolidays["01.11.".$iYear] = "Allerheiligen";
$arHolidays["24.12.".$iYear] = "Heiligabend"; # eigentlich kein Feiertag
$arHolidays["25.12.".$iYear] = "1. Weihnachtstag";
$arHolidays["26.12.".$iYear] = "2. Weihnachtstag";
$arHolidays["31.12.".$iYear] = "Silvester"; # eigentlich kein Feiertag
/* DERFINE MOVING DAYS HERE AND ADD THEM TO THE ARRAY */
/* EASTER SUNDAY */
$ostersonntag = strftime("%d.%m.%Y",easter_date($iYear));
/* KARFREITAG: OSTERSONNTAG - 2 */
$karfreitag = strftime("%d.%m.%Y",(easter_date($iYear) - 2*86400));
/* OSTERMONTAG: OSTERSONNTAG + 1 */
$ostermontag = strftime("%d.%m.%Y",(easter_date($iYear) + 86400));
/* CHRISTI HIMMELFAHRT: OSTERSONNTAG + 39 */
$christi = strftime("%d.%m.%Y",(easter_date($iYear) + 39*86400));
/* PFINGSTSONNTAG: OSTERSONNTAG + 49 */
$pfingstsonntag = strftime("%d.%m.%Y",(easter_date($iYear) + 49*86400));
/* PFINGSTMONTAG: OSTERSONNTAG + 50 */
$pfingstmontag = strftime("%d.%m.%Y",(easter_date($iYear) + 50*86400));
/* FRONLEICHNAM: OSTERSONNTAG + 60 */
$fronleichnam = strftime("%d.%m.%Y",(easter_date($iYear) + 60*86400));[/PHP]

[size=1]Gefunden im PHP-Forum [/size]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...