Hab das mit dem Script hier aus dem forum gelöst.
Frage die Bool Variable ab ob Feiertag.
<?
SetValueString(CreateVariableByName($IPS_SELF, "1. Advent", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), '1. Advent')));
SetValueString(CreateVariableByName($IPS_SELF, "2. Advent", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), '2. Advent')));
SetValueString(CreateVariableByName($IPS_SELF, "3. Advent", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), '3. Advent')));
SetValueString(CreateVariableByName($IPS_SELF, "4. Advent", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), '4. Advent')));
SetValueString(CreateVariableByName($IPS_SELF, "Heilige drei Könige", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Heilige drei Könige')));
SetValueString(CreateVariableByName($IPS_SELF, "Heilige drei Könige plus 1", 3, "~String"),date("d.m.Y", Feiertag(date("Y")+1, 'Heilige drei Könige')));
SetValueString(CreateVariableByName($IPS_SELF, "Rosenmontag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Rosenmontag')));
SetValueString(CreateVariableByName($IPS_SELF, "Fastnacht", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Fastnacht')));
SetValueString(CreateVariableByName($IPS_SELF, "Karfreitag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Karfreitag')));
SetValueString(CreateVariableByName($IPS_SELF, "Ostersonntag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Ostersonntag')));
SetValueString(CreateVariableByName($IPS_SELF, "Ostermontag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Ostermontag')));
SetValueString(CreateVariableByName($IPS_SELF, "Tag der Arbeit", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Tag der Arbeit')));
SetValueString(CreateVariableByName($IPS_SELF, "Christi Himmelfahrt", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Christi Himmelfahrt')));
SetValueString(CreateVariableByName($IPS_SELF, "Pfingstsonntag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Pfingstsonntag')));
SetValueString(CreateVariableByName($IPS_SELF, "Pfingstmontag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Pfingstmontag')));
SetValueString(CreateVariableByName($IPS_SELF, "Fronleichnam", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Fronleichnam')));
SetValueString(CreateVariableByName($IPS_SELF, "Mariä Himmelfahrt", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Mariä Himmelfahrt')));
SetValueString(CreateVariableByName($IPS_SELF, "Tag der deutschen Einheit", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Tag der deutschen Einheit')));
SetValueString(CreateVariableByName($IPS_SELF, "Reformationstag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Reformationstag')));
SetValueString(CreateVariableByName($IPS_SELF, "Allerheiligen", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Allerheiligen')));
SetValueString(CreateVariableByName($IPS_SELF, "Buß- und Bettag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Buß- und Bettag')));
SetValueString(CreateVariableByName($IPS_SELF, "Heiligabend", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Heiligabend')));
SetValueString(CreateVariableByName($IPS_SELF, "1. Weihnachtsfeiertag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), '1. Weihnachtsfeiertag')));
SetValueString(CreateVariableByName($IPS_SELF, "2. Weihnachtsfeiertag", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), '2. Weihnachtsfeiertag')));
SetValueString(CreateVariableByName($IPS_SELF, "Silvester", 3, "~String"),date("d.m.Y", Feiertag(date("Y"), 'Silvester')));
// Heute Feiertag?
$feiertage = array(
"Neujahr",
"Heilige Drei Könige",
"Rosenmontag",
"Fastnacht",
"Aschermittwoch",
"Karfreitag",
"Ostersonntag",
"Ostermontag",
"Tag der Arbeit",
"Christi Himmelfahrt",
"Pfingstsonntag",
"Pfingstmontag",
"Fronleichnam",
"Mariä Himmelfahrt",
"Tag der deutschen Einheit",
"Reformationstag",
"Allerheiligen",
"Buß- und Bettag",
"1. Advent",
"Heiligabend",
"1. Weihnachtsfeiertag",
"2. Weihnachtsfeiertag",
"Silvester",
);
$count = 0;
while ($count < count($feiertage))
{
if (date("d.m.Y", time()) == date("d.m.Y", (Feiertag(date("Y"), $feiertage[$count]))))
{
SetValueBoolean(CreateVariableByName($IPS_SELF, "Feiertag", 0, "Schalter"), true);
$count = count($feiertage);
}
else
{
SetValueBoolean(CreateVariableByName($IPS_SELF, "Feiertag", 0, "Schalter"), false);
}
$count ++;
}
// Adventsszeit ?
$AdvStart = mktime(0,0,1,date("m", Feiertag(date("Y"), '1. Advent')),date("d", Feiertag(date("Y"), '1. Advent')),date("Y", Feiertag(date("Y"), '1. Advent')));
$AdvStop = mktime(23,59,59,1,6,date("Y")+1);
if (time() > $AdvStart and time() < $AdvStop)
{
SetValueString(CreateVariableByName($IPS_SELF, "Advent", 3, "~String"),"Adventszeit");
}
else
{
SetValueString(CreateVariableByName($IPS_SELF, "Advent", 3, "~String"),"keine Adventszeit");
}
// Errechnet das Datum des Ostersonntags für ein gegebenes Jahr
function easter($year) {
if($year > 2038 || $year < 1970) {
return false;
} else {
$a = $year % 19;
$b = $year % 4;
$c = $year % 7;
$m = ((8 * ($year / 100) + 13) / 25) - 2;
$s = ($year / 100) - ($year / 400) - 2;
$M = (15 + $s - $m) % 30;
$N = (6 + $s) % 7;
$d = ($M + 19 * $a) % 30;
if ($d == 29) {
$D = 28;
} elseif ($d == 28 && $a >= 11) {
$D = 27;
} else {
$D = $d;
}
$e = (2 * $b + 4 * $c + 6 * $D + $N) % 7;
$delta = $D + $e + 1;
$easter = gmmktime(0, 0, 0, 3, 21, $year) + $delta * (24 * 3600);
return $easter;
}
}
// Berechnet alle festen und variablen Feiertage eines gegebenen Jahrs.
// Die Feiertage werden als Array zurückgeliefert, wobei der Key dem
// Feiertagsnamen entspricht und der Wert dem entsprechenden Zeitstempel.
function Feiertage($year) {
$OneDay = 24 * 60 * 60;
$easter = easter($year);
if(!$easter) {
return false;
} else {
$advday = date('w', gmmktime(0, 0, 0, 11, 26, $year));
$advent = gmmktime(0, 0, 0, 11, 26, $year) + (($advday == 0 ? 0 : 7 - $advday) * $OneDay);
$holidays['Neujahr'] = gmmktime(0, 0, 0, 1, 1, $year);
$holidays['Heilige Drei Könige'] = gmmktime(0, 0, 0, 1, 6, $year);
$holidays['Rosenmontag'] = $easter - (48 * $OneDay);
$holidays['Fastnacht'] = $easter - (47 * $OneDay);
$holidays['Aschermittwoch'] = $easter - (46 * $OneDay);
$holidays['Karfreitag'] = $easter - (2 * $OneDay);
$holidays['Ostersonntag'] = $easter;
$holidays['Ostermontag'] = $easter + (1 * $OneDay);
$holidays['Tag der Arbeit'] = gmmktime(0, 0, 0, 5, 1, $year);
$holidays['Christi Himmelfahrt'] = $easter + (39 * $OneDay);
$holidays['Pfingstsonntag'] = $easter + (49 * $OneDay);
$holidays['Pfingstmontag'] = $easter + (50 * $OneDay);
$holidays['Fronleichnam'] = $easter + (60 * $OneDay);
$holidays['Mariä Himmelfahrt'] = gmmktime(0, 0, 0, 8, 15, $year);
$holidays['Tag der deutschen Einheit'] = gmmktime(0, 0, 0, 10, 3, $year);
$holidays['Reformationstag'] = gmmktime(0, 0, 0, 10, 31, $year);
$holidays['Allerheiligen'] = gmmktime(0, 0, 0, 11, 1, $year);
$holidays['Buß- und Bettag'] = $advent - (11 * $OneDay);
$holidays['1. Advent'] = $advent;
$holidays['2. Advent'] = $advent + (7 * $OneDay);
$holidays['3. Advent'] = $advent + (14 * $OneDay);
$holidays['4. Advent'] = $advent + (21 * $OneDay);
$holidays['Heiligabend'] = gmmktime(0, 0, 0, 12, 24, $year);
$holidays['1. Weihnachtsfeiertag'] = gmmktime(0, 0, 0, 12, 25, $year);
$holidays['2. Weihnachtsfeiertag'] = gmmktime(0, 0, 0, 12, 26, $year);
$holidays['Silvester'] = gmmktime(0, 0, 0, 12, 31, $year);
array_walk($holidays, 'ResetHours');
return $holidays;
}
}
// Berechnet das Datum eines bestimmten Feiertags im gegebenen Jahr.
// Liefert als Ergebnis den Zeitstempel des Feiertags bzw. false wenn das Jahr
// ungültig oder der Feiertag unbekannt ist.
function Feiertag($year, $name) {
$OneDay = 24 * 60 * 60;
$easter = easter($year);
if(!$easter) {
return false;
} else {
$advday = date('w', gmmktime(0, 0, 0, 11, 26, $year));
$advent = gmmktime(0, 0, 0, 11, 26, $year) + (($advday == 0 ? 0 : 7 - $advday) * $OneDay);
switch (strtolower($name)) {
case 'neujahr': return ResetHour(gmmktime(0, 0, 0, 1, 1, $year));
case 'heilige drei könige': return ResetHour(gmmktime(0, 0, 0, 1, 6, $year));
case 'rosenmontag': return ResetHour($easter - (48 * $OneDay));
case 'fastnacht': return ResetHour($easter - (47 * $OneDay));
case 'aschermittwoch': return ResetHour($easter - (46 * $OneDay));
case 'karfreitag': return ResetHour($easter - (2 * $OneDay));
case 'ostersonntag': return ResetHour($easter);
case 'ostermontag': return ResetHour($easter + (1 * $OneDay));
case 'tag der arbeit': return ResetHour(gmmktime(0, 0, 0, 5, 1, $year));
case 'christi himmelfahrt': return ResetHour($easter + (39 * $OneDay));
case 'pfingstsonntag': return ResetHour($easter + (49 * $OneDay));
case 'pfingstmontag': return ResetHour($easter + (50 * $OneDay));
case 'fronleichnam': return ResetHour($easter + (60 * $OneDay));
case 'mariä himmelfahrt': return ResetHour(gmmktime(0, 0, 0, 8, 15, $year));
case 'tag der deutschen einheit': return ResetHour(gmmktime(0, 0, 0, 10, 3, $year));
case 'reformationstag': return ResetHour(gmmktime(0, 0, 0, 10, 31, $year));
case 'allerheiligen': return ResetHour(gmmktime(0, 0, 0, 11, 1, $year));
case 'buß- und bettag': return ResetHour($advent - (11 * $OneDay));
case '1. advent': return ResetHour($advent);
case '2. advent': return ResetHour($advent + (7 * $OneDay));
case '3. advent': return ResetHour($advent + (14 * $OneDay));
case '4. advent': return ResetHour($advent + (21 * $OneDay));
case 'heiligabend': return ResetHour(gmmktime(0, 0, 0, 12, 24, $year));
case '1. weihnachtsfeiertag': return ResetHour(gmmktime(0, 0, 0, 12, 25, $year));
case '2. weihnachtsfeiertag': return ResetHour(gmmktime(0, 0, 0, 12, 26, $year));
case 'silvester': return ResetHour(gmmktime(0, 0, 0, 12, 31, $year));
default: return false;
}
}
}
// Beseitigt Stundenanteile in einem UNIX-Zeitstempel
function ResetHours(&$timestamp) {
$hour = date('G', $timestamp);
$timestamp -= ($hour * 3600);
}
function ResetHour($timestamp) {
$hour = date('G', $timestamp);
$timestamp -= ($hour * 3600);
return $timestamp;
}
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
?>