Wochentage, Feiertage, freie Tage, Schulferien...

Hallo,

ich habe mir mal ein paar Gedanken gemacht, wie ich in meiner Rollladensteuerung die o. erwähnten Tage einbeziehen kann und das ist dabei rausgekommen:

<?
/*
***********************************************************
Berechnet den Wochentag, freie Tage, Schulferien, Feiertage
und setzt die Variablen
***********************************************************
File     : Wochentag_u_freie_Tage.ips.php
Trigger  : Variable "AKT_STUNDE"  (Timers & Triggers)
Interval : onchange
*/


//Datumsformat "JJJJMMTT"

   $today = date ("md");                                                        // aktueller Tag
   $todayy = date ("Ymd");                                                      // aktuelles Datum
   $year = date ("Y");                                                          // aktuelles Jahr
   $wochentag = GetValueString("WOCHENTAGNR");                                  // aktuelle Wochentagnummer
   
   $herbstferienbeginn = "20081013";                                            // Herbstferienbeginn
   $herbstferienende = "20081024";                                              // Herbstferienende
   
   $weihnachtsferienbeginn = "20081220";                                        // Weihnachtsferienbeginn
   $weihnachtsferienende = "20090103";                                          // Weihnachtsferienende
   
   $winterferienbeginn = "20090202";                                            // Winterferienbeginn
   $winterferienende = "20090207";                                              // Winterferienende
   
   $osterferienbeginn = "20090406";                                             // Osterferienbeginn
   $osterferienende = "20090417";                                               // Osterferienende
   
   $pfingstferienbeginn = "20080513";                                           // Pfingstferienbeginn
   $pfingstferienende = "20080516";                                             // Pfingstferienende
   
   $sommerferienbeginn = "20080710";                                            // Sommerferienbeginn
   $sommerferienende = "20080820";                                              // Sommerferienende
   
   $schulfrei1 = "20080502";                                                    // schulfreier Tag #1
   $schulfrei2 = "20080502";                                                    // schulfreier Tag #2
   $schulfrei3 = "20080502";                                                    // schulfreier Tag #3
   
   $urlaubbeginn1 = "20080000";                                                 // Urlaubsbeginn Urlaub #1
   $urlaubende1 = "20080000";                                                   // Urlaubsende Urlaub #1
   
   $urlaubbeginn2 = "20080000";                                                 // Urlaubsbeginn Urlaub #2
   $urlaubende2 = "20080000";                                                   // Urlaubsende Urlaub #2
   


sleep(1);



// *** Wochentag setzen (Sonntag = 7, Montag = 1) ***

$wday = date("w");
$wday1 = array("7","1","2","3","4","5","6");
$wday2 = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
//echo "Heute ist Wochentag ", $wday1[$wday], " ($wday2[$wday])","
";
SetValueString("WOCHENTAGNR", $wday1[$wday]);
SetValueString("WOCHENTAGNAME", $wday2[$wday]);


// *** Tag des Jahres setzen ***

SetValueString("JAHRTAGNR", date("z"));


// *** Kalenderwoche setzen ***

SetValueString("KALENDERWOCHE", date("W"));


sleep(1);



// *** bewegliche Feiertage ***

if ( ($today == strftime("%m%d",(easter_date() - 2 * 86400)))                   // Karfreitag
//or ($today == "0512")                                                           // Test-Tag (aktuellen Tag eintragen zum Funktionstest)
or ($today == strftime("%m%d",(easter_date() )))                                // Ostersonntag
or ($today == strftime("%m%d",(easter_date() + 1 * 86400)))                     // Ostermontag
or ($today == strftime("%m%d",(easter_date() + 39 * 86400)))                    // Christi Himmelfahrt
or ($today == strftime("%m%d",(easter_date() + 49 * 86400)))                    // Pfingstsonntag
or ($today == strftime("%m%d",(easter_date() + 50 * 86400)))                    // Pfingstmontag
//or ($today == strftime("%m%d",(easter_date() + 60 * 86400)))                    // Fronleichnam
//or (($wochentag == 3) and ($today >= "1116") and ($today <= "1122"))            // Buß u. Bettag


// *** feste Feiertage ***

or ($today == "0101")                                                           // Neujahr
or ($today == "0106")                                                           // Heilige Drei Könige
or ($today == "0501")                                                           // 1. Mai
or ($today == "1003")                                                           // Tag der dt. Einheit
or ($today == "1031")                                                           // Reformationstag
//or ($today == "1101")                                                           // Allerheiligen
or ($today == "1225")                                                           // 1. Weihnachtsfeiertag
or ($today == "1226")                                                           // 2. Weihnachtsfeiertag


// *** freie Tage ***

or ($today == "1224")                                                           // Heiliger Abend
or ($today == "1231")                                                           // Silvester


// *** Schulferien und schulfreie Tage***

or (($todayy >= $herbstferienbeginn) and ($todayy <= $herbstferienende))        // Herbstferien
or (($todayy >= $weihnachtsferienbeginn) and ($todayy <= $weihnachtsferienende))// Weihnachtsferien
or (($todayy >= $winterferienbeginn) and ($todayy <= $winterferienende))        // Winterferien
or (($todayy >= $osterferienbeginn) and ($todayy <= $osterferienende))          // Frühjahrsferien
or (($todayy >= $pfingstferienbeginn) and ($todayy <= $pfingstferienende))      // Pfingstferien
or (($todayy >= $sommerferienbeginn) and ($todayy <= $sommerferienende))        // Sommerferien
or ($todayy == $schulfrei1)                                                     // schulfreier Tag #1
or ($todayy == $schulfrei2)                                                     // schulfreier Tag #2
or ($todayy == $schulfrei3)                                                     // schulfreier Tag #3


// *** Urlaub ***

or (($todayy >= $urlaubbeginn1) and ($todayy <= $urlaubende1))                  // 1. Urlaubszeitraum
//or (($todayy >= $urlaubbeginn2) and ($todayy <= $urlaubende2))                  // 2. Urlaubszeitraum
)


// *** "Freier Tag"-Variable setzen ***

   {
   SetValueBoolean("FREIER_TAG", true);                                         // Es ist ein freier Tag

//   echo "Heute sind Schulferien, ein schulfreier Tag oder Urlaub, ein freier Tag oder ein Feiertag. ","
";
   }
   else
   {
   SetValueBoolean("FREIER_TAG", false);                                        // Es ist kein freier Tag

//   echo "Heute sind keine Schulferien, kein schulfreier Tag, kein Urlaub, kein freier Tag und kein Feiertag. ","
";
   }
?>

Man kann die Feiertage je nach Bedarf aktivieren u. deaktivieren, indem man die Doppel-Slashes entfernt, oder setzt.
Im Script sieht man die Konfiguration, die für mich zutreffend ist.
Für die Rheinländer sind die Karnevalssachen sicher auch interessant.
Getriggert wird das Script einmal täglich um Mitternacht, wenn die „AKT_TAG“-Variable sich ändert.

Somit kann ich den Wochentag (als String) und die „freien Tage“ (als Boolean) in beliebige Scripte mit einbauen.

Sicher lässt sich das ganze noch irgendwie einfache aufbauen, aber wichtig ist für mich, dass es erstmal funktioniert.
Bin aber für Verbesserungsvorschläge von den Profis sehr offen!

Hallo nancilla,

das währe eigentlich genau das, was Toni mit dem Kalendarium und dem TT_Feiertage Befehl macht, allerdings deckt das auch nicht alles aus deinem Script ab.

Gruß Thomas

TT_Feiertage Befehl

Bin immer noch nicht dahinter gekommen, wie ich das einbauen sollte, um das zu erreichen, was ich will bzw. wie ich mit dem Script von mir erreiche.

Würde es schonmal probieren…
Wie müsste ich das machen?

Na z.B.


$Datum = TT_Feiertage("Ostermontag",2007);
echo $Datum;

ergibt:
09.04.2007

so erhält man den Feiertag als Datum und kann mit einem einfachen if mit dem aktuellen Datum vergleichen…

Gruß Thomas

Aha!

…und wo kann ich rausbekommen, welche Feiertage möglich sind bzw. das „TT_Feiertage“ umfasst?

[b]
Tag:
Ostersonntag
Ostermontag
Karfreitag
Christi Himmelfahrt
Pfingstsonntag
Pfingstmontag
Neujahr
Tag der Arbeit
Tag der deutschen Einheit
Reformationstag
Heiligabend

  1. Weihnachtsfeiertag
  2. Weihnachtsfeiertag
    Silvester

[/b]

MFG Thomas

OK, danke!

Das sind dann die besprochenen bundeseinheitlichen.
Ich habe in mein Script mal alles reingepackt, was mir so einfiel bzw. benötigt wird.

Ja klar, das ist ok, wenn man an die diversen Bundesländer und an die unterschiedlichen Ferienzeiten denkt ist ein variables Script bzw. eine Editmöglichkeit das Beste. Schreibe auch gerade an einer umfangreichen Sache für meinen Designer… :slight_smile:

Gruß Thomas

Hallo,

ich bekomme aus meiner PHP-Klasse bisher diese heraus, was fehlt da denn aus Eurer Sicht noch und ist da etwas abhaengig vom Bundesland?

Array
(
    [1167606000] => Neujahr
    [1168038000] => Heilige 3 Könige
    [1177970400] => 1. Mai
    [1187128800] => Maria Himmelfahrt
    [1191362400] => Tag der deutschen Einheit
    [1193785200] => Buß- und Bettag
    [1193871600] => Allerheiligen
    [1198450800] => Heiligabend
    [1198537200] => 1. Weihnachtsfeiertag
    [1198623600] => 2. Weihnachtsfeiertag
    [1199055600] => Sylvester
    [1171839600] => Rosenmontag
    [1172012400] => Aschermittwoch
    [1175810400] => Karfreitag
    [1175983200] => Ostersonntag
    [1176069600] => Ostermontag
    [1179352800] => Himmelfahrt
    [1180216800] => Pfingstsonntag
    [1180303200] => Pfingstmontag
    [1181167200] => Fronleichnam
    [1196550000] => 1. Advent
    [1197154800] => 2. Advent
    [1197759600] => 3. Advent
    [1198364400] => 4. Advent
    [1194130800] => Totensonntag
    [1193522400] => Volkstrauertag
)
Array
(
    [1171407600] => Valentienstag
    [1174431600] => Frühlingsanfang
    [1182376800] => Sommeranfang
    [1191362400] => Herbstanfang
    [1198278000] => Winteranfang
    [1174777200] => Sommerzeitumstellung
    [1193522400] => Winterzeitumstellung
    [1179007200] => Muttertag
)
heute ist der : 20.10.07

?>

Gruss Torro

Hallo Torro

was fehlt da denn aus Eurer Sicht noch und ist da etwas abhaengig vom Bundesland?

Hier http://www.feiertage.net/ findest du sie alle:)

Ich habe aus meiner Sicht aber auf Advent, Valentinstag, Muttertag etc. verzichtet.
Das sind ja im eigentlichen Sinne keine Feiertage, bzw. keine arbeitsfreien und Advent fällt immer auf einen Sonntag, wie eigentlich auch der Ostersonntag, was aber zur Vollständigkeit trotzdem ein einheitlicher Feiertag.

Was hast Du vor?
Ich würde meinen Listen auch gern als array ausführen, hab aber keine Ahnung, wie das geht, vielleicht kannst du mir da behilflich sein!?
Das „Wochentage array“ habe ich nur hier aus einem anderen Posting vom Forum geklaut und auf meine Bedürfnisse abgeändert…:wink:

Hallo nancillam

das weiss ich und kenne ich auch. Aber mir gehts mehr um den Code, den hat man dort nicht.

Ich habe aus meiner Sicht aber auf Advent, Valentinstag, Muttertag etc. verzichtet.

das ist nur der Vollstaendigkeit halber mit drin.

Was hast Du vor?

Ich brauche diese Klasse fuer WIIPS-> Heating und WIIPS-Calendar. Da ich diese separat anlege, kann man die auch jederzeit fuer andere Sachen benutzen.

Ich würde meinen Listen auch gern als array ausführen, hab aber keine Ahnung, wie das geht, vielleicht kannst du mir da behilflich sein!?
Das „Wochentage array“ habe ich nur hier aus einem anderen Posting vom Forum geklaut und auf meine Bedürfnisse abgeändert…:wink:

Die standardmaessigen Sachen (Wochentage gehoeren dazu) sollte man nicht abspeichern, die sind ja immer vorhanden. Dazu gibts fertige PHP Funktionen. Beispielsweise Dein Wochentag:

echo date("w");

Schreibe einfach mal, was Du Dir so wuenschst, was Du brauchst. Der Aufruf wird dann wie folgt gehen:


// Einbinden der Klasse
require_once("web/basis/calendar.ips.php");
$cal = new Calendar();

// moegliche Funktionsaufrufe
cal->feiertag : Boolean // Feiertag ?
cal->feiertagname : String // Name des Feiertags

cal->we : Boolean  // Wochenende ?

Gruss Torro

Ja, das ist schön, viel schöner…:smiley:

Schreibe einfach mal, was Du Dir so wuenschst, was Du brauchst.

Na persönlich… vom Prinzip alles, was ich in meinem Script nicht ausgeklammert habe.
Aber die Liste was du geschrieben hast, ist ja schon ziemlich umfangreich, man müsste nur noch eine Funktion zum an- o. abhaken der nötigen Feiertage haben, oder man muss es dann wieder ausklammern (//).
Das wirst du ja sicher auch im scheinbar kommenden WIIPS-Calendar so vorsehen :wink:

Hallo nancilla,

nee, das kann man dann auch so machen:


$cal = new Calendar("sachsen");  // alle Bundeslaender moeglich

Gruss Torro

Dann gibt es aber auch noch evangelische o. katholische Gebiete, die man noch differenzieren müsste, innerhalb eines Bundeslandes und die Möglichkeit für Grenzgänger, wie z.B. mich, der in den Genuss der vielen bayerischen Feiertage kommt, gleichsam aber auch die thüringischen Feiertage mit einbeziehen muss;)

Hallo,

von mir aus gern. Habt Ihr beide denn Lust, das ganze mal mit fertig zu machen? Meldet Euch dazu einfach mal im Chat…

Gruss Torro

Chat, chat, chat, wo?
Gerne würde ich das mit „ausbauen“ helfen.
Gibts´n WIIPS-Chat oder meinst du den http://www.eyep.de/forum/showthread.php?t=3417

Genau dieser, java plugin ist Voraussetzung. Einfach zwischen Kalender und Neue Beiträge klicken. :wink:

Gruß Thomas

Hallo Thomas,

und ich muss Port 6667 ausgehend in der Firewall(bei mir Router) freigeben, auf welche IP oder DNS-Name? UDP, TCP oder beides?

Hallo nancilla,

keine Ahnung, ich benutze Trillian dafuer, nicht den Webchat. Muss aber jeder selbst wissen.

Gruss Torro

Das neue Kalendarium wird alle Feiertage Deutschlands in Abhängigkeit von Bundesland und Konfession kennen. Die TT_Feiertage (infos dazu gibts auf meiner Page www.tonis-welt.com) hab ich nur gebaut um eine einfache Übergangslösung nach C.F. Gauss zur verfügung gestellt. Auch diese werde ich noch ausbauen.

Gruß,

Toni