Eigentlich könnte man daraus ein einfaches Modul für die V4 machen.
Hier mein aktueller Stand, gibt nur Probleme, wenn mehr als ein Feiertag in der Woche ist, also zwischen Weihnachten und Neujahr ;).
Die ganzen Variablen müssen (leider) manuell angelegt und angepasst werden.
<?php
// Hilfsfunktionen
function boolString($bValue = false) { // returns string
return ($bValue ? ', Feiertag diese Woche' : '');
}
function getGermanPublicHolidays($year = null) {
if(!$easter = easter_date($year)) return false;
else {
$holidays['Neujahr'] = mktime(0,0,0,1,1,$year);
// $holidays['Rosenmontag'] = strtotime("-48 days", $easter);
$holidays['Tag der Arbeit'] = mktime(0,0,0,5,1,$year);
$holidays['Karfreitag'] = strtotime("-2 days", $easter);
$holidays['Ostern'] = $easter;
$holidays['Ostersonntag'] = $easter;
$holidays['Ostermontag'] = strtotime("+1 day", $easter);
$holidays['Himmelfahrt'] = strtotime("+39 days", $easter);
$holidays['Pfingsten'] = strtotime("+49 days", $easter);
$holidays['Pfingstsonntag'] = strtotime("+49 days", $easter);
$holidays['Pfingstmontag'] = strtotime("+50 days", $easter);
// $holidays['Fronleichnam'] = strtotime("+60 days", $easter);
$holidays['Tag der Einheit'] = mktime(0,0,0,10,3,$year);
$holidays['Heiligabend'] = mktime(0,0,0,12,24,$year);
$holidays['1. Weihnachtsfeiertag'] = mktime(0,0,0,12,25,$year);
$holidays['2. Weihnachtsfeiertag'] = mktime(0,0,0,12,26,$year);
$holidays['Silvester'] = mktime(0,0,0,12,31,$year);
$holidays['1. Advent'] = strtotime("1 sunday", mktime(0,0,0,11,26,$year));
$holidays['2. Advent'] = strtotime("2 sunday", mktime(0,0,0,11,26,$year));
$holidays['3. Advent'] = strtotime("3 sunday", mktime(0,0,0,11,26,$year));
$holidays['4. Advent'] = strtotime("4 sunday", mktime(0,0,0,11,26,$year));
return $holidays;
}
}
// Hier die gewünschten Tage und Meldungen in der benötigten Woche eintragen
// An welchem Tag (0-6) in der geraden oder ungeraden Woche wird was abgeholt
$abfuhrtermine = array ( 'u' => array ( '2' => 'Restmüll rausstellen',
'3' => 'Altpapier/Verpackung rausstellen'),
'g' => array ( '3' => 'Altpapier rausstellen',
'5' => 'Bioabfälle rausstellen'));
$tag[0] = "So";
$tag[1] = "Mo";
$tag[2] = "Di";
$tag[3] = "Mi";
$tag[4] = "Do";
$tag[5] = "Fr";
$tag[6] = "Sa";
$feiertag_diese_woche = GetValueBoolean(42624 /*[Visualisierung\Mülltermine\Abfuhrdatum errechnen\Feiertag in der Woche]*/);
$feiertag_name = GetValueString( 12400 /*[Visualisierung\Mülltermine\Abfuhrdatum errechnen\Feiertag Name]*/);
$heuteD = date("d");
$heuteM = date("m");
$heuteY = date("Y");
/*** TEST Tag
$heuteD = 19;
$heuteM = 02;
$heuteY = 2012; ***/
// Feiertag heute? setzen für andere Scripte
$heute = mktime( 0, 0, 0, $heuteM, $heuteD, $heuteY );
SetValueBoolean(41473 /*[Visualisierung\Allgemeine Tagesdaten\feiertag]*/ , array_search($heute, getGermanPublicHolidays(date("Y",$heute))));
$morgen = mktime( 0, 0, 0, $heuteM, $heuteD+1, $heuteY );
if($_IPS['SENDER'] == "Execute")
echo "Aktueller Tag : ".date("d.m.Y", mktime( 0, 0, 0, $heuteM, $heuteD, $heuteY ))."
Betrachteter Tag: ";
$datum = date("d.m.Y", $morgen);
$woche = date("W", $morgen); // W - Wochennummer des Jahres (z.B.: 28)
$wochentag = date("w", $morgen); // w - Wochentag (0(Sonntag) bis 6(Samstag))
$feiertag = array_search($morgen, getGermanPublicHolidays(date("Y",$morgen)));
if ( $feiertag <> "" AND !($wochentag == 0) ) {
if ( $_IPS['SENDER'] == "Execute" )
echo $feiertag.", KEINE Abholung, dadurch 1 Tag Verschiebung";
SetValueBoolean(42624 /*[Visualisierung\Mülltermine\Abfuhrdatum errechnen\Feiertag in der Woche]*/, true);
SetValueString(12400 /*[Visualisierung\Mülltermine\Abfuhrdatum errechnen\Feiertag Name]*/, $feiertag);
return;
}
// Feiertagsmerker am Sonntag zurücksetzen
If ($wochentag == 0 ) {
SetValueBoolean(42624 /*[Visualisierung\Mülltermine\Abfuhrdatum errechnen\Feiertag in der Woche]*/, false);
SetValueString(12400 /*[Visualisierung\Mülltermine\Abfuhrdatum errechnen\Feiertag Name]*/, "");
}
if($_IPS['SENDER'] == "Execute")
echo $tag[$wochentag]." ".$datum.", Tag ".$wochentag.boolString($feiertag_diese_woche);
// Prüfung auf Gerade oder Ungerade Woche
if($woche % 2 == 0) {
if($_IPS['SENDER'] == "Execute")
echo ", gerade Woche
";
$gu = 'g';
} else {
if($_IPS['SENDER'] == "Execute")
echo ", ungerade Woche
";
$gu = 'u';
}
$ausgabe = "";
SetValueBoolean(18009 /*[Visualisierung\Mülltermine\Meldung anzeigen]*/, false);
if ( !$feiertag_diese_woche ) {
if ( isset($abfuhrtermine[$gu][$wochentag])) {
$ausgabe = $abfuhrtermine[$gu][$wochentag].", Abholung am ".$tag[$wochentag]." ".$datum;
SetValueBoolean(18009 /*[Visualisierung\Mülltermine\Meldung anzeigen]*/, true);
}
} elseif ( isset($abfuhrtermine[$gu][$wochentag-1])) {
$ausgabe = $abfuhrtermine[$gu][$wochentag-1].", Abholung am ".$tag[$wochentag]." ".$datum . "
(Feiertagsverschiebung wegen: ".$feiertag_name.")";
SetValueBoolean(18009 /*[Visualisierung\Mülltermine\Meldung anzeigen]*/, true);
}
if($_IPS['SENDER'] == "Execute")
echo $ausgabe;
SetValueString(47956 /*[Visualisierung\Mülltermine\Meldung]*/, $ausgabe);
?>