Schulferien

ok, heißt das

if (($jetzt >= $start) and ($jetzt <= $ende) or ($jetzt == $ende))  

ist identisch zu

if ($jetzt >= $start && $jetzt <= $ende || $jetzt == $ende)  

or und and haben eine niedrigere Priorität als || und &&.

Das kann zu unerwarteten Ergebnissen führen.

Beispiel:

$f = false or true;

ergibt false

und

$h = true and false;

ergibt true.

Das erwartet man eigentlich nicht. Von daher meide ich and und or.

Um Dein Beispiel vollständig zu erfassen sollte man noch ergänzen das „=“ höhere Prio hat als „and“ und „or“ - aber eben niedrigere als „&&“ und „||“ :wink:
Klammern würden das wieder zurechtrücken.

Beste Grüße
/Jens

Stimmt, dass muss man auch noch berücksichtigen.:smiley:

Um es abzuschließen,

if (($jetzt >= $start) && ($jetzt <= $ende)){ ...

wäre eindeutig und lässt keinen Spielraum für Interpretationen :slight_smile:

Viele Grüße

Burkhard

Danke!
Ich danke euch, 2 Fliegen mit einer Klappe erwischt, das Script läuft jetzt und auch wieder was dazu gelernt.
Und das selbe Script, nur für Feiertage, geht jetzt auch. :slight_smile:

Hallo,
heut sind die Winterferien hier in Sachsen-Anhalt zu Ende, aber das Script sagt das heute noch Ferien sind.
Bei $anzahl = (count($meldung)-59); und am Ende echo $ferien, $ende; erhalte ich die Meldung:
Winterferien 2016 Sachsen-Anhalt20160211
Wenn ich $anzahl = (count($meldung)-1); auslese, kommt die Meldung:
Winterferien 2016 Sachsen-Anhalt20170103

Wo ist der Fehler?

Der Fehler ist in den Kalenderdaten .
Siehe www.schulferien.org/iCal/Ferien/icals/Ferien_Sachsen_Anhalt_2016.ics

BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:-//schulferien.org//iCal Generator//DE
BEGIN:VEVENT
CREATED:20160211T091449Z
LAST-MODIFIED:20160211T091449Z
DTSTAMP:20160211T091449Z
SUMMARY:Winterferien 2016 Sachsen-Anhalt
DTSTART;VALUE=DATE:20160201
DTEND;VALUE=DATE:20160211 <==== evtl. falscher Eintrag
URL:Schulferien.org - Ferien, Feiertage, Kalender
DESCRIPTION:Alle Termine auf Schulferien.org - Ferien, Feiertage, Kalender
TRANSP:TRANSPARENT
UID:F_2016_termin56bc42fa06e15@schulferien.org
END:VEVENT
BEGIN:VEVENT
CREATED:20160211T091449Z
LAST-MODIFIED:20160211T091449Z
DTSTAMP:20160211T091449Z
SUMMARY:Osterferien 2016 Sachsen-Anhalt
DTSTART;VALUE=DATE:20160324
DTEND;VALUE=DATE:20160325
URL:Schulferien.org - Ferien, Feiertage, Kalender
DESCRIPTION:Alle Termine auf Schulferien.org - Ferien, Feiertage, Kalender
TRANSP:TRANSPARENT
UID:F_2016_termin56bc42fa0752b@schulferien.org
END:VEVENT
BEGIN:VEVENT

ok, wenn der Fehler in der *.ics Datei ist, sollte ich ja morgen gesagt bekommen das keine Ferien mehr sind.
Aber was hat es damit:
Bei $anzahl = (count($meldung)[COLOR="#FF0000"]-59); und am Ende echo $ferien, $ende; erhalte ich die Meldung:
Winterferien 2016 Sachsen-Anhalt20160211
Wenn ich $anzahl = (count($meldung)-1); auslese, kommt die Meldung:
Winterferien 2016 Sachsen-Anhalt20170103[/COLOR]
auf sich?

Um heute schon zu testen wie es morgen oder an anderen Tage sein wird kann man folgendes modifizieren:

$jetzt = '20160212'; // hier ist auch ein beliebiges Datum zum Testen verwendbar 
// $jetzt = date("Ymd"); 

Die Anzahl der Tabelleneinträge sind 154.
Die 1. Zeile der Tabelle (Array) beginnt bei Indexnummer „0“ und endet bei der Zeile 154 mit der Indexnummer 153.
Das kann man prüfen z.B. mit dem Befehl:

 print_r($meldung);

Array
(
[0] => BEGIN:VCALENDAR

[1] => VERSION:2.0

[152] => END:VEVENT

[153] => END:VCALENDAR

)

Bei der Zeile

$anzahl = (count($meldung)-1) 

wird die $anzahl auf 153 gestellt um bei der Schleife

for ($count = 0; $count < $anzahl; $count++)

bei Zeile 154 aber mit der Indexnummer 153, die ‚for - Schleife‘ zu beenden.

Die Variablen $count und $anzahl sind Indexnummern und nicht die Zeilennummer (oder evt. sonstiges) - siehe Ausgabe von print_r.

Ich denke dies wird dir auch bei deinen weiteren Fragen helfen.:wink:

Beispiel Feiertage:
vorher:
$link = „http://www.schulferien.org/iCal/Feiertage/icals/Feiertage_Bayern_".$jahr.".ics“;

aktuell:
$link = „http://www.schulferien.org/media/ical/deutschland/feiertage_bayern_".$jahr.".ics

Groß- / Kleinschreibung beachten!

Gleiches gilt für Schulferien!

Ist mir per Zufall aufgefallen.

Man muß m.E. doch noch eine Routine einbauen um zukünfig im Fehlerfall einen Alarm auszulösen, wenn der Download nicht funzt.

Ich benutze „PHP-Module für IPS 4.X“ nicht, dennoch dürfte dies auch davon betrofffen sein :wink:

Jup, wurde mir auch schon berichtet. Fix kommt nachher.
Michael

PS: Ist online. Wer ein Bundesland mit ‚-‘ ausgewählt hatte, muss leider in der Instanz sein Bundesland neu auswählen und speichern.

Das Modul Schuldferien wirft seit gestern den folgenden fehler aus:

<b>Notice</b>: Cannot load iCal Data. in <b>D:\Symcon\IP-Symcon\modules\IPSSchoolHolidays\Schulferien\module.php</b> on line <b>67</b><br />

Ich vermute mal, das die Webseite zum Bezug des iCal Files umgebaut wurde und der Download Pfad nicht mehr stimmt, oder?

Loerdy

Download ist jetzt mit Captcha-Eingabe verknüpft:
Captcha.png

Bei mir kommt nur

{"success":"0","message":""}

Und beim iCal -Format auch keine Abfrage :confused:
Ahh. da war wohl noch etwas im Cache… nun bekomme ich auch das Captcha :frowning: :frowning:

Michael

Edit: Alternative:

Und das Modul baue ich morgen um :wink:

Das Script kann auf die URLs welche hier hinterlegt sind geändert werden.
Schulferien im iCal Format zum Download 2017, 2018


<?
/*
Dieses Skript ermittelt über die Webseite von www.schulferien.eu ob aktuell Ferien sind.
Die Anpassung für die einzelnen Bundesländer ist denkbar einfach. Einfach unter https://www.schulferien.eu/downloads/ferien-im-ical-format/
den passenden Kalender suchen und den Link kopieren. Die Anpassung der Jahreszahl bitte beachten, diese
passt sich automatisch an und muss im Link entsprechend entfernt werden.
*/

$jahr = date("Y")-1;
$link = "https://www.schulferien.eu/downloads/ical4.php?land=1&type=1&year=".$jahr;
$meldungvj = file($link);
$jahr = date("Y");
$link = "https://www.schulferien.eu/downloads/ical4.php?land=1&type=1&year=".$jahr;
$meldungakt = file($link);
$meldung = array_merge($meldungvj, $meldungakt);

Für das IPS4.x Modul ist ein Update online:
Version 2.00:

  • Anbieterwechsel auf schulferien.eu (Einstellung Bundesland muss neu übernommen werden!)

Michael

Der Inhalt der runtergeladenen File aus dem $link ist fast leer.
Die Angabe im $link sollte ohne .".ics" enden.

<?
/*
Dieses Skript ermittelt über die Webseite von www.schulferien.eu ob aktuell Ferien sind.
Die Anpassung für die einzelnen Bundesländer ist denkbar einfach. Einfach unter https://www.schulferien.eu/downloads/ferien-im-ical-format/
den passenden Kalender suchen und den Link kopieren. Die Anpassung der Jahreszahl bitte beachten, diese
passt sich automatisch an und muss im Link entsprechend entfernt werden.
*/

$jahr = date("Y")-1;
$link = "https://www.schulferien.eu/downloads/ical4.php?land=1&type=1&year=".$jahr;
$meldungvj = file($link);
$jahr = date("Y");
$link = "https://www.schulferien.eu/downloads/ical4.php?land=1&type=1&year=".$jahr;
$meldungakt = file($link);
$meldung = array_merge($meldungvj, $meldungakt);

Danke, hatte das übersehen aber im Modul richtig gemacht.
C & P Fehler :smiley:
Michael

Habe schon länger diesen Modul im Einsatz.
Jetzt kommt ab und zu eine Fehlermeldung

23.09.2021, 00:45:47 | TimerPool            | Schulferien (UpdateSchoolHolidays): 
Notice: Error load iCal Data. in /var/lib/symcon/modules/.store/de.nall.chan.schoolholidays/Schulferien/module.php on line 68

Die Variablen werden aber aktualisiert.

Gruß