Tagwächter: Feiertage Beta

0 91

Feiertage Beta

Tagwächter
  • php
  • seitenbewertung
  1. 0
    MudGuard
    1. 0
      Tagwächter
      1. 0
        Matthias Apsel
        1. 0
          Tagwächter
          1. 0
            Matthias Apsel
          2. 0
            dedlfix
            1. 0
              Tagwächter
              1. 0
                dedlfix
        2. 0
          Tagwächter
          1. 0
            Matthias Apsel
            • php
            1. 0
              Google weiß alles
        3. 0
          Auge
          • menschelei
    2. 0
      Tagwächter
    3. 0
      Tagwächter
      1. 0
        MudGuard
        1. 0
          Der Martin
          1. 1
            MudGuard
            1. 0
              Der Martin
              1. 0
                Tagwächter
        2. 0
          Google weiß alles
  2. 0
    TS
    1. 0
      Tagwächter
  3. 0
    pl
    1. 0
      Tagwächter
      1. 0
        pl
        1. 0
          1unitedpower
          • humor
          • performance
          1. 0

            Komplexe Arrays/Hashs wegschreiben und Lesen - heute: var_dump()

            Google weiß alles
            • performance
            • php
            1. 0

              Komplexe Arrays/Hashs wegschreiben und Lesen - heute: var_export()

              Google weiß alles
              1. 0
                1unitedpower
                1. 0
                  Google weiß alles
                2. 0

                  Feiertage (BETA)

                  Tagwächter
          2. 0
            pl
            1. 0
              1unitedpower
            2. 0

              Schneller Test

              Google weiß alles
              1. 0

                Schneller Test (Fazit)

                Google weiß alles
          3. 0
            pl
            1. 0
              Christian Kruse
              1. 0
                Google weiß alles
                1. 0
                  hausl
                  1. 0
                    Google weiß alles
      2. 0
        TS
        • php
        • projekt
  4. 0
    Rolf b
    1. 0
      Tagwächter
      1. 0
        Rolf b
        1. 0
          Tagwächter
        2. 0
          Tagwächter
          1. 0
            pl
            1. 0
              Google weiß alles
  5. 0
    TS
    • php
    • projekt
    1. 0
      Tagwächter
    2. 0
      Tagwächter
  6. 0
    mermshaus
    1. 0
      Tagwächter
      1. 0

        Allfällige Korrektur

        Tagwächter
      2. 0
        mermshaus
      3. 1
        hausl
      4. 1
        hausl
        1. 0
          Der Martin
          1. 0
            Google weiß alles
            1. 0
              hausl
          2. 0
            hausl
            1. 0
              Der Martin
              1. 0
                Google weiß alles
              2. 0
                hausl
            2. 0
              Tabellenkalk
              • feiertag
              1. 0
                Google weiß alles
              2. 0
                Der Martin
              3. 0
                hausl
                1. 0
                  Google weiß alles
                  1. 0
                    hausl
                    1. 0
                      Google weiß alles
                      1. 0
                        hausl
                  2. 0
                    Google weiß alles
                    1. 0
                      hausl
                      1. 0
                        Der Martin
                  3. 0
                    Der Martin
                    1. 0
                      Google weiß alles
                2. 0
                  Tabellenkalk
                  1. 0
                    hausl
                    1. 0
                      Tabellenkalk
                      1. 0
                        hausl
        2. 0
          Google weiß alles
          1. 0
            hausl
            1. 0
              Google weiß alles
      5. 2
        hausl
        1. 0

          Feiertage Beta - Neue Versionsnummer: 0.4

          Google weiß alles
          1. 0

            Feiertage Beta - Neue Versionsnummer: 0.6

            Google weiß alles
            1. 0

              Feiertage Beta - Neue Versionsnummer: 0.7

              Tagwächter
  7. 0
    pl
    1. 0
      Google weiß alles

problematische Seite

Ich habe mal das Resultat meines heutigen Nachmittags auf den Server gestellt. Ein Skript, welches als Bibliothek gedacht ist um in PHP-Programmen für einzelne Tage oder ganze Kalender festzustellen, ob, wann und wo einer dieser störrischen Feier- und Gedenktage stattfindet. Die Daten und Regeln für die Feiertage habe ich zum Wohle der Österreicher und Schweizer in einer ini-Datei versenkt, die hoffentlich selbsterklärend ist...

Ich habe damit sogar mal einem Anwendungsfall gefunden, bei dem ich mir sicher bin, dass die Nutzung eines Objektes den Programmablauf ganz wesentlich beschleunigt: Die beiden primitiven Tests "hecheln" jeweils ein ganzes Jahr durch.

Eigentlich ist es "Feiertage2", denn die alte Version war noch ein gräßlicher Kuddelmuddel aus Programm und Daten - und "geht bald über den Jordan".

Ach so: Was ich wissen will.

Habt Ihr irgendwelche Anregungen, die über die zur Laufzeit austauschbare ini-Datei hinausgehen?

akzeptierte Antworten

  1. problematische Seite

    Hi,

    Reformationstag fehlt. Ist in einigen Bundeländern Feiertag.

    1.11. ist nicht Faschingsbeginn. Da ist Allerheiligen.

    11.11. ist auch nicht Faschingsbeginn, sondern Karnevals-Anfang.

    Muttertag fehlt (2. Sonntag im Mai - laut der Seite fehlt diese Kategorie nter Wochentag im Monat komplett)

    Mariä Himmelfahrt ist in Bayern nur in Gemeinden mit überwiegend katholischer [1] Bevölkerung Feiertag.

    (weiter hab ich's nicht angeguckt ...)

    cu,
    Andreas a/k/a MudGuard


    1. d.h. mit mehr katholischer als evangelischer Bevölkerung, andere Bevölkerungsanteile werden nicht berücksichtigt ... ↩︎

    1. problematische Seite

      Danke!

      Reformationstag fehlt. Ist in einigen Bundeländern Feiertag.

      [x] eingefügt

      1.11. ist nicht Faschingsbeginn. Da ist Allerheiligen.

      [x] eingefügt

      11.11. ist auch nicht Faschingsbeginn, sondern Karnevals-Anfang.

      [x] korrigiert und umbenannt

      Muttertag fehlt (2. Sonntag im Mai - laut der Seite fehlt diese Kategorie nter Wochentag im Monat komplett)

      [ ] Oh je. N-ter Wochentag im Monat. Da muss ich drüber schlafen. Und kann dann wohl auch gleich die Zeitumstellung und "ordre mufti" (einmaliger bundesweiter Reformationstag 2017) mit berücksichtigen.

      Mariä Himmelfahrt ist in Bayern nur in Gemeinden mit überwiegend katholischer [^1] Bevölkerung Feiertag.

      [x] Datum und Code eingefügt

      1. problematische Seite

        Hallo Tagwächter,

        Und kann dann wohl auch gleich […] und "ordre mufti" (einmaliger bundesweiter Reformationstag 2017) mit berücksichtigen.

        Warum „par or­d­re du muf­ti“? Sind nicht alle Feiertage „par or­d­re du muf­ti“?

        Man verwendet „par or­d­re du muf­ti“ häufig, wenn es keinen sachlichen Grund für eine Anweisung gibt. Den sehe beim 500. Jubiläum schon.

        Außerdem gibt es wieder aktuelle Vorstöße, den Reformationstag und auch den Buß- und Bettag als bundesweite Feiertage einzuführen.

        Bis demnächst
        Matthias

        --
        Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
        1. problematische Seite

          Warum „par or­d­re du muf­ti“? Sind nicht alle Feiertage „par or­d­re du muf­ti“?

          Ja, schon. Aber ein einmaliger Feiertag? Wobei es mir durchaus als "erlaubt" erscheint, dass die „or­d­re du muf­ti“ das Interesse der Programmierer nicht in den Vordergund stellt. Aber ein wenig motzen darf man da doch dennoch- oder?

          1. problematische Seite

            Hallo Tagwächter,

            Wobei es mir durchaus als "erlaubt" erscheint, dass die „or­d­re du muf­ti“ das Interesse der Programmierer nicht in den Vordergund stellt.

            Warum sollte das Interesse der Programmierer im Vordergrund stehen? ;-) Als ob irgendjemand irgendwann überhaupt einmal an die Befindlichkeiten eines Programmierers denken würde. Da heißt es doch immer nur „Mach ma!“

            Aber ein einmaliger Feiertag?

            Gerade der ist mMn. eben nicht „par or­d­re du muf­ti“

            Aber ein wenig motzen darf man da doch dennoch- oder?

            Aus Programmierersicht? Aus Arbeitnehmersicht? ;-)

            Bis demnächst
            Matthias

            --
            Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
          2. problematische Seite

            Tach!

            Warum „par or­d­re du muf­ti“? Sind nicht alle Feiertage „par or­d­re du muf­ti“?

            Ja, schon. Aber ein einmaliger Feiertag? Wobei es mir durchaus als "erlaubt" erscheint, dass die „or­d­re du muf­ti“ das Interesse der Programmierer nicht in den Vordergund stellt. Aber ein wenig motzen darf man da doch dennoch- oder?

            Das lohnt sich aber nicht. Im praktischen Leben gibt es auch noch Brückentage und andere Gelegenheiten, an denen beim potentiellen Verwender die Arbeit ruht. Die sind so individuell, dass man sowieso eine Möglichkeit zum Hinzufügen eigener Datümer benötigt. Da kann man dann auch solche Tage eingeben.

            dedlfix.

            1. problematische Seite

              Aber ein wenig motzen darf man da doch dennoch- oder?

              Das lohnt sich aber nicht.

              Ich hab das 3x gelesen und dann hoffentlich begriffen: Du meinst mit "lohnt sich nicht" doch das "motzen" - oder?

              dass man sowieso eine Möglichkeit zum Hinzufügen eigener Datümer benötigt. Da kann man dann auch solche Tage eingeben.

              Oh je. Einen auch für Laien sicher und komfortabel zu bedienenden Editor/Generator für die INI?

              Das wird quasi ein eigenes Projekt.

              1. problematische Seite

                Tach!

                Ich hab das 3x gelesen und dann hoffentlich begriffen: Du meinst mit "lohnt sich nicht" doch das "motzen" - oder?

                Ja, weil vergeudete Energie, die man sinnvoller einsetzen kann.

                Oh je. Einen auch für Laien sicher und komfortabel zu bedienenden Editor/Generator für die INI?

                Nicht unbedingt. Ein verständliches Datenformat reicht für den Anfang. Die Frage ist ja, welche Zielgruppe du hast. Du stellst ja keinen Cloudservice bereit, den Lieschen Müller nutzen soll. Stattdessen ist es ein Stück Programmcode, der irgendwo eingebunden werden soll. Wer machst sowas? Ein Techniker, mehr oder weniger. Zielgruppe ist also erstmal diese Personengruppe.

                dedlfix.

        2. problematische Seite

          Außerdem gibt es wieder aktuelle Vorstöße, den Reformationstag und auch den Buß- und Bettag als bundesweite Feiertage einzuführen.

          Hm. Es waren nur übersichtliche Änderungen in INI und Programm erforderlich. Der 2017er Reformationstag klappt jetzt. Wobei mich das Ganze zu der Frage führt, ob ich nicht Begrenzungen im Sinne von notBevore und notAfter für jeden der Feiertage einführen sollte. Damit wäre die künftige Einführung, die Abschaffung und auch die Einmaligkeit "erschlagen"...

          1. problematische Seite

            Hallo Tagwächter,

            Hm. Es waren nur übersichtliche Änderungen in INI und Programm erforderlich. Der 2017er Reformationstag klappt jetzt. Wobei mich das Ganze zu der Frage führt, ob ich nicht Begrenzungen im Sinne von notBevore und notAfter für jeden der Feiertage einführen sollte. Damit wäre die künftige Einführung, die Abschaffung und auch die Einmaligkeit "erschlagen"...

            Before ;-)

            Und man kann auch Feiertage verschieben, zum Beispiel den 17. Juni auf den 3. Oktober. Ich weiß man kann sie dann auch unterschiedlich benennen. Aber wenn die einfach Nationalfeiertag Deutschland heißen, hast du eine Verschiebung.

            Und ich frage mich gerade, ob sich der Aufwand lohnt. Ich habe (mit meinen nicht wirklich überragenden Programmierkenntnissen) mehrere Anläufe getätigt, die Seitenerstellung auf brückentage.info zu automatisieren und bin (für mich) zu der Erkenntnis gelangt, dass eine händische Bearbeitung der Seiten zielführender ist. Für die Feriendichte erstelle ich zum Beispiel in excel Dateien, die dann als CSV importiert werden und ein wenig mit suchen und ersetzen aufgehübscht werden.

            Im Ergebnis sieht das dann so aus: (April 2017)

            $daten[0] = array('Sa','So','Mo','Di','Mi','Do','Fr');
            $daten[1] = array(4.25,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0); //be
            $daten[2] = array(3.06,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0); //br
            $daten[3] = array(13.16,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //bw
            $daten[4] = array(15.34,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //by
            $daten[5] = array(0.67,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //hb
            $daten[6] = array(2.19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); //hh
            $daten[7] = array(7.42,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0); //he
            $daten[8] = array(2.00,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0); //mv
            $daten[9] = array(9.68,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //ni
            $daten[10] = array(21.82,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //nw
            $daten[11] = array(4.89,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //rp
            $daten[12] = array(1.24,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //sa
            $daten[13] = array(5.07,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //sn
            $daten[14] = array(2.85,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0); //st
            $daten[15] = array(3.47,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //sh
            $daten[16] = array(2.73,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0); //th
            
            $feiertage[14] = array('Karfreitag','bef');
            $feiertage[16] = array('Ostersonntag','bef');
            $feiertage[17] = array('Ostermontag','bef');
            

            gemeldete oder selbst gefundene Fehler kann ich dann dort korrigieren und muss nicht in einer relativ komplizierten Programmierlogik suchen, wo etwas falsch läuft und warum das im Mai 2015 klappt aber im Juni 2017 nicht.

            Die Feiertage habe ich in einer kleinen Datenbank abgebildet. Bundesland und Feiertag als Entitätsmengen, BL_hat_FT alsRelationsship. Das Datum als Attribut. Der Reformationstag_2017 ist ein eigenes Entity. Das funktioniert zuverlässig. Dass ich da jedes Jahr wiederkehrende Aufgaben zu lösen habe, die auch eine gewisse Zeit benötigen, nehme ich gern in Kauf.

            Bis demnächst
            Matthias

            --
            Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
            1. problematische Seite

              Before ;-)

              Das merk ich mir diesmal hoffentlich.

              Dateien, die dann als CSV importiert werden und ein wenig mit suchen und ersetzen aufgehübscht werden.

              Solche Sachen mach ich auch gern:

              <?php
              $arf = file('easter.csv');
              
              $arr = array();
              foreach ($arf as $row) {
                  list($d, $m, $y) = explode( ' ', trim($row));
                  $arr[$y] = mktime(0, 0, 0, $m, $d, $y);
              }
              
              file_put_contents ('easterDate.php', '<?php function easterDate($y) { $arr = ' . preg_replace('/\s\s+/',' ', var_export($arr, true) . '; return $arr[$y];}'));
              

              Ausschnitt aus easter.csv:

              4 4 2010
              24 4 2011
              8 4 2012
              31 3 2013
              20 4 2014
              5 4 2015
              27 3 2016
              16 4 2017
              1 4 2018
              21 4 2019
              12 4 2020
              4 4 2021
              17 4 2022
              9 4 2023
              31 3 2024
              

              Das ergibt dann einen ziemlich heftigen "Einzeiler":

              <?php function easterDate($y) { $arr = array ( 1700 => -8511699600, 
              [...]
              , 2299 => 10391324400,); return $arr[$y];}
              

              Irgendwann vorher sahen die Daten so aus ...

              https://www.assa.org.au/edm

              Aber kate kann reguläre Ausdrücke ... damit war das in Minuten umgefummelt.

              Nur leider war das für die Katz, denn wie die Tests ergaben ist die Funktion mit dem return aus dem Array signifikanter langsamer als

              function easterDate($y) {
                  return ( mktime(0, 0, 0, 3, 21 + easter_days( $y ), $y ) );
              }
              
        3. problematische Seite

          Hallo

          Man verwendet „par or­d­re du muf­ti“ häufig, wenn es keinen sachlichen Grund für eine Anweisung gibt. Den sehe beim 500. Jubiläum schon.

          Wegen der Erfindung des Tesa-Films? ;-)

          Außerdem gibt es wieder aktuelle Vorstöße, den Reformationstag und auch den Buß- und Bettag als bundesweite Feiertage einzuführen.

          Bloß nicht! Das brächte unsere Wirtschaft an den Rand des Ruins!

          Tschö, Auge

          --
          Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.
          Wolfgang Schneidewind *prust*
    2. problematische Seite

      Muttertag fehlt (2. Sonntag im Mai - laut der Seite fehlt diese Kategorie unter Wochentag im Monat komplett)

      ]x] erledigt!

      Ich hoffe, es ist nicht zu schwierig etwas wie

      [MO_WT_WO]
      
      # Mai[5], Sonntag[7], zweiter[2] im Monat
      crontab[] = "5,7,2"
      name[]   = "Muttertag"
      codes[]  = ""
      notBefore[] = "~"
      notAfter[]  = "~"
      
      # März[3], Sonntag[7], letzter[L] im Monat
      crontab[] = "3,7,L"
      name[]   = "Umstellung auf Sommerzeit"
      codes[]  = ""
      notBefore[] = "~"
      notAfter[]  = "~"
      
      # Oktober[10], Sonntag[7, letzter[L] im Monat
      crontab[] = "10,7,L"
      name[]   = "Umstellung auf Winterzeit"
      codes[]  = ""
      notBefore[] = "~"
      notAfter[]  = "~"
      
      # November[11], Sonntag[7], erster[1] im Monat
      crontab[] = "11,7,1"
      name[]   = "Reformationstag (Schweiz)"
      codes[]  = ""
      notBefore[] = "~"
      notAfter[]  = "~"
      

      zu ergänzen, wenn weitere solcher Tage ermittelt werden sollen.

    3. problematische Seite

      Muttertag fehlt (2. Sonntag im Mai - laut der Seite fehlt diese Kategorie unter Wochentag im Monat komplett)

      ]x] erledigt!

      Ich hoffe, es ist nicht zu schwierig etwas wie

      [MO_WT_WO]
      
      # Mai[5], Sonntag[7], zweiter[2] im Monat
      crontab[] = "5,7,2"
      name[]   = "Muttertag"
      codes[]  = ""
      notBefore[] = "1923"
      notAfter[]  = "~"
      
      # März[3], Sonntag[7], letzter[L] im Monat
      crontab[] = "3,7,L"
      name[]   = "Umstellung auf Sommerzeit"
      codes[]  = ""
      notBefore[] = "~"
      notAfter[]  = "~"
      
      # Oktober[10], Sonntag[7, letzter[L] im Monat
      crontab[] = "10,7,L"
      name[]   = "Umstellung auf Winterzeit"
      codes[]  = ""
      notBefore[] = "~"
      notAfter[]  = "~"
      
      # November[11], Sonntag[7], erster[1] im Monat
      crontab[] = "11,7,1"
      name[]   = "Reformationstag (Schweiz)"
      codes[]  = ""
      notBefore[] = "~"
      notAfter[]  = "~"
      

      zu ergänzen, wenn weitere solcher Tage ermittelt werden sollen.

      1. problematische Seite

        Hi,

        # Oktober[10], Sonntag[7, letzter[L] im Monat
        crontab[] = "10,7,L"
        name[]   = "Umstellung auf Winterzeit"
        

        Es gibt keine Winterzeit ...

        vorletzter Sonntag im Oktober? Ist das dann "10,7,2L"? Oder wie gibt man sowas an?

        cu,
        Andreas a/k/a MudGuard

        1. problematische Seite

          Hallo,

          name[] = "Umstellung auf Winterzeit"

          Es gibt keine Winterzeit ...

          doch, es gibt eine Sommerzeit. Das impliziert, dass es auch eine Winterzeit (das Gegenstück dazu) gibt. Sonst wäre die Bezeichnung sinnlos.

          vorletzter Sonntag im Oktober? Ist das dann "10,7,2L"? Oder wie gibt man sowas an?

          Abgesehen davon: Die Umstellung von Sommer- auf Winterzeit erfolgt am letzten Wochenende im Oktober, nicht am vorletzten.

          Ciao,
           Martin

          --
          Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
          - (frei übersetzt nach Douglas Adams)
          1. problematische Seite

            Hi,

            Es gibt keine Winterzeit ...

            doch, es gibt eine Sommerzeit.

            unbestritten.

            Das impliziert, dass es auch eine Winterzeit (das Gegenstück dazu) gibt.

            Nein. Das, was fälschlicherweise als Winterzeit bezeichnet wird, ist die Normalzeit.

            vorletzter Sonntag im Oktober? Ist das dann "10,7,2L"? Oder wie gibt man sowas an?

            Abgesehen davon: Die Umstellung von Sommer- auf Winterzeit erfolgt am letzten Wochenende im Oktober, nicht am vorletzten.

            Ja und? Hab ich Gegenteiliges behauptet (wobei ich nicht die "Winterzeit", sondern die Normalzeit erwähnen würde).

            Ich wollte schlicht wissen, wie in Tagwaechters Konfiguration der vorletzte Sonntag im Oktober definiert werden kann. Unabhängig davon, was für ein Gedenktag, Feiertag oder sonstiger Tag ist.

            cu,
            Andreas a/k/a MudGuard

            1. problematische Seite

              Hallo

              Es gibt keine Winterzeit ...

              doch, es gibt eine Sommerzeit.

              unbestritten.

              Das impliziert, dass es auch eine Winterzeit (das Gegenstück dazu) gibt.

              Nein. Das, was fälschlicherweise als Winterzeit bezeichnet wird, ist die Normalzeit.

              und die wird als Gegenstück zur Sommerzeit im Volksmund eben auch als Winterzeit bezeichnet.

              Welche von den beiden nun als "normal" bezeichnet wird, ist eine rein subjektive Festtlegung. Mir ist es völlig egal, wenn nur die zweimal im Jahr stattfindende Umstellung endlich wegfiele.

              Nicht dass es mich persönlich stört - die eine Stunde hin oder her liegt in der Grö0enordnung, in der mein Biorhythmus sowieso von Tag zu Tag schwankt. Aber das Theater mit der Umstellung (ÖPNV, Fernsehprogrammm) ist einfach lästig.

              So long,
               Martin

              --
              Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
              - (frei übersetzt nach Douglas Adams)
              1. problematische Seite

                Ich habe den Eintrag geändert, Genauheim hat viele Einwohner.

                Nicht dass es mich persönlich stört - die eine Stunde hin oder her liegt in der Grö0enordnung, in der mein Biorhythmus sowieso von Tag zu Tag schwankt.

                Auch mein Tagesablauf ist nicht so fixiert. Dennoch bereitet mir die Umstellerei Probleme.

                Für den Montag nach Umstellung auf Sommerzeit nehme ich z.B. keine Aufträge für Seminare mehr an. Das ist mein persönlicher Pechtag: Wenn ich pünktlich sein sollte fallen Züge aus, werden Autobahnen unmittelbar vor mir wegen eines Unfalls für 4 Stunden voll gesperrt, lauter SOWAS.

        2. problematische Seite

          vorletzter Sonntag im Oktober? Ist das dann "10,7,2L"?

          Danke für den Hinweis auf ein fehlendes Future, aber mangels mir bekannter Anwendung denke ich, wer sowas einzigartiges will mag mich mit Geld überreden.

          Die nächsten Schritte sind:

          Wechselbare ini, ein paar Optimierungen/Vervollständigungen, Code säubern und Bugs suchen, Umbenennung des Projekts (bei Feiertagen ist es ja nicht geblieben ...), eine Beispielanwendung, eine Oberfläche zum Erstellen und Löschen von Ereignissen, Export einzelner oder aller Daten nach iCalendar/ical ...

  2. problematische Seite

    Hallo und guten Morgen,

    da kommt nichts...

    Server down?

    Grüße
    TS

    --
    es wachse der Freifunk
    http://freifunk-oberharz.de
    1. problematische Seite

      Naja. Gegen zwei Uhr ist es wegen der dynamischen IP manchmal schwierig. (Einwahl, IP-Cache des Firefox)

  3. problematische Seite

    Gute Idee -- die INI!

    Habt Ihr irgendwelche Anregungen, die über die zur Laufzeit austauschbare ini-Datei hinausgehen?

    Um den Code aufzuteilen, habe ich eine Basisklasse, welche die fortlaufenden Tage nach Scaliger berechnet (Julianische Tage) mit nahtlosem Übergang über die Greg. Reform.

    Alles was zur Berechnung der Feiertage (Ostern nach Gauss, Adventzyklus) gehört, steckt in einer Klassenerweiterung.

    MfG

    1. problematische Seite

      Gute Idee -- die INI!

      Danke. Die ini ist einfacher zu editieren als JSON . Kann ja sein, irgendwer will mal Geburtstage mit einbauen ...

      Ich ja so ein Perormance-Fuzzi und die Test-Skripte brauchen schon einen bedeutenden Teil einer Sekunde.

      Ich bin mir noch nicht ganz sicher ob ich INI nicht die irgendwie nach json "compiliere" (nachfolgend könnten schon einige Prüfungen wegfallen) und ob das einen Performanceschub gibt oder ob ich ganze Jahre (als JSON) cachen sollte. Dazu müsste ich aber bei jedem Abruf das Änderungsdatum der ini mit dem Cache vergleichen oder diesen manuell löschen.

      Wobei: Wenn ich nur einen Monat durchhechele, was ja auch der häufigste Anwendungsfall sein wird, dann bin ich (auf dem Banana Pi!) bei 20 .. 30 Millisekunden. Mal sehen, wo ich das noch hinbekommen.

      1. problematische Seite

        Ich bin mir noch nicht ganz sicher ob ich INI nicht die irgendwie nach json "compiliere"

        Compilieren ja, aber JSON ist auch nicht performanter im Serialisieren. Wenn Du was wirklich Schnelles haben willst, serialisiere byteorientiert auf Low-Level. Mit untenstehendem Algorithmus (den ich auch irgendwo in PHP habe) liest mein FW den gesamten Content (derzeit ca. 300 Einzelseiten) aus einer Bytesequenz mit ca. 1 MB, das geht ratz fatz. Die Datenstruktur ist nach dem Muster Entity-Attribute-Value, was genauso auch zu einer ini-Datei passt.

        Evntl. sparst Du Dir aber auch den Umweg über die ini und baust Dir gleich ein Backend für die Binary.

        
        package EAVHandle;
        
        use strict;
        use warnings;
        
        sub handle2eav{
            my $pkg = shift;
            my $fh = shift;
            seek $fh,0,0;
            
            my %eav = ();
            while( read($fh, my $buffer, 12)){
                my($elen, $alen, $vlen) = unpack "NNN", $buffer;
                read($fh, my $ent, $elen);
                read($fh, my $att, $alen);
                read($fh, my $val, $vlen);
                $eav{$ent}{$att} = $val;
            }
            
            return \%eav;
        }
        
        sub eav2str{
            my $pkg = shift;
            my $ref = shift;
            my $CONTENT = '';
            foreach my $ent(keys %{$ref}){
                foreach my $att(sort {$b cmp $a} keys %{$ref->{$ent}}){
                    my $val = $ref->{$ent}{$att} || '';
                    $CONTENT .= pack("NNN", length $ent, length $att, length $val).$ent.$att.$val;
                }
            }
            return $CONTENT;
        }
        
        sub eav2handle{
            my $pkg = shift;
            my $ref = shift;
            my $fh  = shift;
            seek($fh,0,0);
            truncate($fh,0);
            
        
            foreach my $ent(keys %{$ref}){
                foreach my $att(sort {$b cmp $a} keys %{$ref->{$ent}}){
                    my $val = $ref->{$ent}{$att} || '';
                    $fh->print( pack("NNN", length $ent, length $att, length $val).$ent.$att.$val );
                }
            }
        }
        
        1;
        
        1. problematische Seite

          Ich bin mir noch nicht ganz sicher ob ich INI nicht die irgendwie nach json "compiliere"

          Compilieren ja, aber JSON ist auch nicht performanter im Serialisieren. Wenn Du was wirklich Schnelles haben willst, serialisiere byteorientiert auf Low-Level. Mit untenstehendem Algorithmus (den ich auch irgendwo in PHP habe) liest mein FW den gesamten Content (derzeit ca. 300 Einzelseiten) aus einer Bytesequenz mit ca. 1 MB, das geht ratz fatz.

          „ratz fatz“ ist gar nichts! JSON-Parser erreichen mühelos Geschwindigkeiten von „volle pulle“!

          1. problematische Seite

            Ich habe noch var_dump() im Angebot:

            Schreiben:

            file_put_content($fileName,'<?php $var='.preg_replace('/\s+/',' ',var_dump($var,true)).';');
            

            Lesen:

            include ($fileName); #set the var $var
            

            Der kleine "Packer" (preg_replace('/\s+/',' ', ...) macht natürlich nur Sinn, wenn in der Variablen(Hash, Array) keine (mehrfachen) Spaces (Blanks, Tabs, NewLines, cReturns) auftauchen.

            Sonst einfach:

            file_put_content($fileName,'<?php $var='.var_dump($var,true).';');
            
            1. problematische Seite

              Ups ... verwechselt. var_dump() ist nicht dafür gemacht.

              Ich habe noch var_export() im Angebot:

              Schreiben:

              file_put_contents($fileName,'<?php $var='.preg_replace('/\s+/',' ',var_export($var,true)).';');
              

              Lesen:

              include ($fileName); #set the var $var
              

              Der kleine "Packer" (preg_replace('/\s+/',' ', ...) macht natürlich nur Sinn, wenn in der Variablen(Hash, Array) keine (mehrfachen) Spaces (Blanks, Tabs, NewLines, cReturns) auftauchen.

              Sonst einfach:

              file_put_contents($fileName,'<?php $var='.var_export( $var , true ) . ';');
              

              Test:

              <?php
              header('Content-Type:text/plain; charset=utf-8');
              $var=array('Foo', 'Bar');
              $fileName='filed_var.php';
              file_put_contents($fileName,'<?php $varRead='.preg_replace('/\s+/',' ',var_export($var,true)).';');
              
              unset($var);
              include ($fileName); #set the var $varRead;
              print_r($varRead);
              

              Ausgaben:

              php test.php 
              Array
              (
                  [0] => Foo
                  [1] => Bar
              )
              

              geschriebene Datei:

              <?php $varRead=array ( 0 => 'Foo', 1 => 'Bar', );
              
              1. problematische Seite

                Ups ... verwechselt. var_dump() ist nicht dafür gemacht.

                Da du Kalendardaten berechnest bietet sich doch ein Kalenderformat wie ical an. Dann kann ein(e) Nutzer(in) direkt die Daten in seine/ihre individuelle Kalendar-App importieren. Die mir bekannten Apps haben auch alle eine Funktion, um ical-Daten direkt per URL zu beziehen.

                1. problematische Seite

                  Da du Kalendardaten berechnest bietet sich doch ein Kalenderformat wie ical an. Dann kann ein(e) Nutzer(in) direkt die Daten in seine/ihre individuelle Kalendar-App importieren. Die mir bekannten Apps haben auch alle eine Funktion, um ical-Daten direkt per URL zu beziehen.

                  Naja. Ical bietet zunächst nicht die Möglichkeit, komplexere Berechnungen der Feiertage durchzuführen.

                  Aber für die Nutzer-Kalenderdaten wäre es natürlich erste Wahl. Schon mal weil man dann auch Einladungen, Bahnfahrten, Hotelaufenthalte etc. einfach importieren kann. Eventuell sogar per Mail, welches ein "Agent" abholt.

                2. problematische Seite

                  Da du Kalendardaten berechnest bietet sich doch ein Kalenderformat wie ical an. Dann kann ein(e) Nutzer(in) direkt die Daten in seine/ihre individuelle Kalendar-App importieren.

                  Jetzt kam ich drauf.

                  Du meinst einen Export der Feiertage.

                  Ja. Klar. Die Feiertagsberechnung ist ja Teil einer Bibliothek die in andere Werke integriert werden soll. Da es also zwingend um "irgendwas mit Kalender" geht steht der Export von Daten für den Import in gängige Apps oder Programme natürlich auf dem Plan. ical ist also ohnehin ein Format über welches ich nachlesen muss. Ich werde den Teil dann auch veröffentlichen.

          2. problematische Seite

            Ich bin mir noch nicht ganz sicher ob ich INI nicht die irgendwie nach json "compiliere"

            Compilieren ja, aber JSON ist auch nicht performanter im Serialisieren. Wenn Du was wirklich Schnelles haben willst, serialisiere byteorientiert auf Low-Level. Mit untenstehendem Algorithmus (den ich auch irgendwo in PHP habe) liest mein FW den gesamten Content (derzeit ca. 300 Einzelseiten) aus einer Bytesequenz mit ca. 1 MB, das geht ratz fatz.

            „ratz fatz“ ist gar nichts! JSON-Parser erreichen mühelos Geschwindigkeiten von „volle pulle“!

            ... sagte der Kollege der JSON so toll fand und hatte danach ein schwieriges Gespräch wegen einer Kundenbeschwerde ;)

            Ich hab dem Kollegen dann den Tip gegeben, er solle wenigstens JSON::XS verwenden, was zwar seine gigantischen JSON-Dateien auch nicht kleiner macht aber merklich schneller parst als das Legacy-Module.

            Aber in Fakt gehts ja auch gar nicht nur um Performance sondern auch um benutzerfreundliche Konfigurationsdateien und Backends. Für Konfigs wie diese hier möchte ich in Gänze weder eine ini, noch jsondatei editieren -- diese Konfig wird aus mehreren Datenquellen zusammengelinkt, maschinell erstellt und erst dann deployed.

            Schönen Sonntag.

            1. problematische Seite

              Meine Kritik zielte darauf ab, dass du deine Aussage nicht untermauert hast. Wer über Performance reden will, muss seine Argumentation mit Messungen und/oder Komplexitäts-Analysen begründen. Anders funktioniert das nicht. Das gilt auch für deine Aussage „Timestamps sind der Performancekiller für Datumsberechnungen“. So salopp dahingestellt ist das nicht ernst zu nehmen.

            2. problematische Seite

              Ich bin mir noch nicht ganz sicher ob ich INI nicht die irgendwie nach json "compiliere"

              Mir geht es vor allem darum, dass die manuell geänderte INI nur einmal geprüft wird. Das json oder was auch immer ich erzeuge wird dann nicht nochmals geprüft, gefiltert oder sonstwas. Das dürfte auf belasteten oder schwachen Servern dann schon Zeit sparen...

              Für Konfigs wie diese hier möchte ich in Gänze

              Der Performance-Test mit genau Deinen Daten auf dem Banana:

              <?php
              header("Content-Type:text/plain; charset=utf8");
              $data=file('data.csv');
              $ar=array();
              foreach ($data as $row) {
                  $ar[]=explode('|', trim($row));
              }
              file_put_contents('data.json', json_encode($ar));
              file_put_contents('data.php','<?php $ar='.preg_replace('/\s+/',' ',var_export($ar,true)).';');
              
              ?>
              =============================
               Lese 1000 mal die data.csv:
              =============================
              <?php
              $ar = array();
              $s  = microtime(1);
              $ar = array();
              for ($i=1; $i < 1000; $i++) {
                  $data = file('data.csv');
                  $ar = array();
                  foreach ($data as $row) {
                      $ar[] = explode( '|', trim($row) );
                  }
              }
              $e = microtime(1);
              echo 'Array hat ' .count($ar). " Items.\n";
              echo ($e-$s), ' Sekunden (avg. ' .  ($e -$s) . ' ms pro Lesevorgang)', "\n\n";
              ?>
              =============================
               Lese 1000 mal die data.json:
              =============================
              <?php
              $ar = array();
              $s  = microtime(1);
              $ar = array();
              for ( $i=1; $i<1000; $i++ ) {
                  $ar = json_decode(file_get_contents('data.json'));
              }
              $e = microtime(1);
              echo 'Array hat ' .count($ar). " Items.\n";
              echo ($e-$s), ' Sekunden (avg. ' .  ($e -$s) . ' ms pro Lesevorgang)', "\n\n";
              ?>
              =============================
               Lese 1000 mal die data.php:
              =============================
              <?php
              $ar = array();
              $s  = microtime(1);
              $ar = array();
              for ( $i = 1; $i < 1000; $i++ ) {
                  include('data.php');
              }
              $e = microtime(1);
              echo 'Array hat ' .count($ar). " Items.\n";
              echo ($e-$s), ' Sekunden (avg. ' .  ($e -$s) . ' ms pro Lesevorgang)', "\n\n";
              

              Abrufbar unter: https://home.fastix.org/Tests/performance_data_read/

              Banana PI M3 mit PHP 7.0.12-1+deb.sury.org~trusty+1 (cli) ( NTS ):

              =============================
               Lese 1000 mal die data.csv:
              =============================
              Array hat 307 Items.
              1.9917180538177 Sekunden (avg. 1.9917180538177 ms pro Lesevorgang)
              
              =============================
               Lese 1000 mal die data.json:
              =============================
              Array hat 307 Items.
              1.2487099170685 Sekunden (avg. 1.2487099170685 ms pro Lesevorgang)
              
              =============================
               Lese 1000 mal die data.php:
              =============================
              Array hat 307 Items.
              0.0023698806762695 Sekunden (avg. 0.0023698806762695 ms pro Lesevorgang)
              
              1. Auffällig ist, dass JSON sehr viel schneller geworden ist als CSV.

              2. Offensichtlich nimmt PHP7 hier irgendeinen internen Cache oder der Interpreter imgeht es anders, die Datei 1000 x zu inkludieren. Das macht auch Sinn, z.b. im Hinblick auf Microtemplates. Also noch ein Test mit PHP vor Version 7:

              Auf dem "richtigen" Rechner mit PHP 5.5.9-1ubuntu4.20 (cli) (built: Oct 3 2016 13:00:37) ergab sich wie folgt:

              php test.php
              =============================
               Lese 1000 mal die data.csv:
              =============================
              Array hat 307 Items.
              0.70170998573303 Sekunden (avg. 0.70170998573303 ms pro Lesevorgang)
              
              =============================
               Lese 1000 mal die data.json:
              =============================
              Array hat 307 Items.
              1.1871249675751 Sekunden (avg. 1.1871249675751 ms pro Lesevorgang)
              
              =============================
               Lese 1000 mal die data.php:
              =============================
              Array hat 307 Items.
              1.7161350250244 Sekunden (avg. 1.7161350250244 ms pro Lesevorgang)
              

              Hier ist der extrem primitive CSV Reader zwar schneller, kann aber nicht komplexes einlesen. In dem Fall ist die Zeit für JSON vertretbar.

              1. problematische Seite

                Ich habe den Test noch um serialize() ergänzt.

                Das Pärchen aus var_export() und include() ist unter PHP 7 mit 0,3 Millisekunden beim Import der sonnenklare Gewinner. Unter PHP 5.9 ist das Ergebnis durchwachsener, aber die Abstände sind nicht wirklich groß und das Lesen der selben Daten (als CSV 21KB, bis 38KB serialisiert) dauert (aus dem Filesystem-Cache!) im Bereich von 0,5 bis 1,3 Millisekunden.

                Bei komplexeren Daten (csv wird dann "schwierig bis unbenutzbar, auf jeden Fall langsamer") kann sich das noch verschieben - ich vermute aber, dass dann das Pärchen aus var_export() und include() noch mehr gewinnt.

                Unter dem Gesichtspunkt der Möglichkeit, auch mit anderen Sprachen (Javascript im Browser!) auf die Daten zuzugreifen könnte allerdings JSON die beste Alternative sein, es ist nur geringfügig langsamer als serialice() / unserialice().

          3. problematische Seite

            Ich bin mir noch nicht ganz sicher ob ich INI nicht die irgendwie nach json "compiliere"

            Compilieren ja, aber JSON ist auch nicht performanter im Serialisieren. Wenn Du was wirklich Schnelles haben willst, serialisiere byteorientiert auf Low-Level. Mit untenstehendem Algorithmus (den ich auch irgendwo in PHP habe) liest mein FW den gesamten Content (derzeit ca. 300 Einzelseiten) aus einer Bytesequenz mit ca. 1 MB, das geht ratz fatz.

            „ratz fatz“ ist gar nichts! JSON-Parser erreichen mühelos Geschwindigkeiten von „volle pulle“!

            PS: Guck Dir bitte noch einmal meinen Algorithmus an. Im Gegensatz zu JSON oder anderen zeichenorientierten Algorithmen arbeitet mein Algorithmus mit Längenangaben (Offset) auf Byte-Ebene. Das heißt, dass ein anderer, zeichenorientierter Algorithmus gar nicht performanter sein kann, was Benchmarks auch bestätigen.

            1. problematische Seite

              Hallo pl,

              PS: Guck Dir bitte noch einmal meinen Algorithmus an. Im Gegensatz zu JSON oder anderen zeichenorientierten Algorithmen arbeitet mein Algorithmus mit Längenangaben (Offset) auf Byte-Ebene. Das heißt, dass ein anderer, zeichenorientierter Algorithmus gar nicht performanter sein kann, […]

              „kann nicht sein” ist keine ausreichende Begründung, wie 1UnitedPower schon sagte: es gibt genau zwei Möglichkeiten, zu beweisen, dass Variante A schneller ist als Variante B. Die erste Variante ist eine Aufwandsabschätzung (siehe Big O notation) oder Benchmarks. Wenn du uns keins von beidem vorlegst ist deine Behauptung nur das: eine Behauptung.

              was Benchmarks auch bestätigen.

              Dann veröffentliche das doch mal. Ganz klassisch. These, Versuchsaufbau, Messmethode, Ergebnisse, Conclusio.

              LG,
              CK

              1. problematische Seite

                Dann veröffentliche das doch mal. Ganz klassisch. These, Versuchsaufbau, Messmethode, Ergebnisse, Conclusio.

                Ich habe zwar auf These und Conclusio verzichtet, aber Versuchsaufbau, Messmethode, Ergebnisse für das Einlesen vermittels

                • CSV
                • unserialice
                • json-decode
                • include
                • parse_ini-file

                habe ich ja veröffentlicht (die Tests und das Fazit) und frage mich, warum PL das ignoriert. Gefällt das Ergebnis nicht?

                1. problematische Seite

                  Mach die Tests bitte mal mit PHP 7. Würde mich interessieren.

                  Bei mir jedenfalls ist es sicher nicht die Datenhaltung sondern die stetige Durchrechnung aller Einträge für das angefragete Jahr bevor die eigenltich Aufgaben (Abfrage, Ausgabe, Suche, etc..) passieren. Das muss so sein, aber im Ernst die paar ms auf oder ab sind mir auch egal.

                  https://home.fastix.org

                  Aber langsam versteh ich warum du so darauf stehst, fastix ;) /IronieOff

                  1. problematische Seite

                    Mach die Tests bitte mal mit PHP 7. Würde mich interessieren.

                    Das ist PHP 7 - aber auf einem Banana Pi M3.

                    Aber langsam versteh ich warum du so darauf stehst, fastix ;) /IronieOff

                    Der Name ist tatsächlich irgendwie auch Programm.

                    So: auf der "großen Kiste":

                    1. Test: mit 5.5.9-1ubuntu4.20 (cli) (built: Oct 3 2016 13:00:37)

                    =============================
                     Lese 1 mal die data.csv:
                    =============================
                    Array hat 307 Items.
                    0.00051 Sekunden
                    
                    =============================
                     Lese 1 mal die data.json:
                    =============================
                    Array hat 307 Items.
                    0.00106 Sekunden
                    
                    =============================
                     Lese 1 mal die data.ser:
                    =============================
                    Array hat 307 Items.
                    0.00056 Sekunden
                    
                    =============================
                     Lese 1 mal die data.php:
                    =============================
                    Array hat 307 Items.
                    0.00172 Sekunden
                    
                    =============================
                     Lese 1 mal die data.ini:
                    =============================
                    Array hat 307 Items.
                    0.00139 Sekunden
                    
                    =============================
                     Lese 50 mal die data.csv:
                    =============================
                    Array hat 307 Items.
                    0.0339 Sekunden (avg. 0.677 ms pro Lesevorgang)
                    
                    =============================
                     Lese 50 mal die data.json:
                    =============================
                    Array hat 307 Items.
                    0.0545 Sekunden (avg. 1.0896 ms pro Lesevorgang)
                    
                    =============================
                     Lese 50 mal die data.ser:
                    =============================
                    Array hat 307 Items.
                    0.0354 Sekunden (avg. 0.7088 ms pro Lesevorgang)
                    
                    =============================
                     Lese 50 mal die data.php:
                    =============================
                    Array hat 307 Items.
                    0.0767 Sekunden (avg. 1.5348 ms pro Lesevorgang)
                    
                    =============================
                     Lese 50 mal die data.ini:
                    =============================
                    Array hat 307 Items.
                    0.0658 Sekunden (avg. 1.3153 ms pro Lesevorgang)
                    

                    2. Test mit hhvm (HipHop VM 3.15.2)

                    =============================
                     Lese 1 mal die data.csv:
                    =============================
                    Array hat 307 Items.
                    0.00953 Sekunden
                    
                    =============================
                     Lese 1 mal die data.json:
                    =============================
                    Array hat 307 Items.
                    0.00494 Sekunden
                    
                    =============================
                     Lese 1 mal die data.ser:
                    =============================
                    Array hat 307 Items.
                    0.00486 Sekunden
                    
                    =============================
                     Lese 1 mal die data.php:
                    =============================
                    Array hat 307 Items.
                    0.0058 Sekunden
                    
                    =============================
                     Lese 1 mal die data.ini:
                    =============================
                    Array hat 307 Items.
                    0.00704 Sekunden
                    
                    =============================
                     Lese 50 mal die data.csv:
                    =============================
                    Array hat 307 Items.
                    0.0232 Sekunden (avg. 0.4648 ms pro Lesevorgang)
                    
                    =============================
                     Lese 50 mal die data.json:
                    =============================
                    Array hat 307 Items.
                    0.0273 Sekunden (avg. 0.5455 ms pro Lesevorgang)
                    
                    =============================
                     Lese 50 mal die data.ser:
                    =============================
                    Array hat 307 Items.
                    0.0162 Sekunden (avg. 0.3245 ms pro Lesevorgang)
                    
                    =============================
                     Lese 50 mal die data.php:
                    =============================
                    Array hat 307 Items.
                    0.0052 Sekunden (avg. 0.1045 ms pro Lesevorgang)
                    
                    =============================
                     Lese 50 mal die data.ini:
                    =============================
                    Array hat 307 Items.
                    0.1146 Sekunden (avg. 2.2925 ms pro Lesevorgang)
                    
      2. problematische Seite

        Hallo und guten Morgen,

        Gute Idee -- die INI!

        Danke. Die ini ist einfacher zu editieren als JSON . Kann ja sein, irgendwer will mal Geburtstage mit einbauen ...

        Und auch per PHP-Addon-Funktion ini_write() durch ein Programm ...

        Grüße
        TS

        --
        es wachse der Freifunk
        http://freifunk-oberharz.de
  4. problematische Seite

    Hallo Tagwächter,

    schöne Fingerübung, die braucht jeder mal.

    Ich hätte folgende Hinweise für dich:

    1. Der Unix time_t Überlauf ist am 19. Januar, darum solltest du die 32-Bit Prüfung mit dem 1. Februar oder sogar mit dem 31.12. vornehmen.

    2. Die PHP Doku erwähnt nicht, wie easter_days() mit dem Gebiet der Ostkirche umgeht. Dort gilt eine andere Osterformel. Beachtet PHP das anhand irgendwelcher Regionaleinstellungen?

    Später vielleicht mehr, muss jetzt weg...

    Rolf

    1. problematische Seite

      1. Der Unix time_t Überlauf ist am 19. Januar, darum solltest du die 32-Bit Prüfung mit dem 1. Februar oder sogar mit dem 31.12. vornehmen.

      [x] Erledigt

      1. Die PHP Doku erwähnt nicht, wie easter_days() mit dem Gebiet der Ostkirche umgeht. Dort gilt eine andere Osterformel. Beachtet PHP das anhand irgendwelcher Regionaleinstellungen?

      [!] easter_days() ist ohnehin eine Funktion, über die ich mir noch Gedanken machen muss, weil die auf hhvm nicht existiert...

      [?] Und wenn ich dabei bin: russisch-orthodoxe Kirchen/Gemeinden gibt es durchaus auch in Deutschland, Frankreich, meinetwegen Malta. Wenn ich diese berücksichtige, dann müsste ich aber erst recht islamische und jüdische Feiertage berücksichtigen. Da muss ich dann aber stark aufpassen, weil ich z.B. nicht den Ramadan oder dessen Ende "verkünden" darf (mit dem Wort "voraussichtlich" aber schon)

      1. problematische Seite

        Ostkirche, Osterformel?

        [!] easter_days() ist ohnehin eine Funktion, über die ich mir noch Gedanken machen muss, weil die auf hhvm nicht existiert...

        So schwer ist die Osterformel nicht, steht in der Wikipedia. Du musst sie ja nur anwenden, nicht verstehen (da steckt einiges an astronomischen Tabellen drin, die für einen gewissen Zeitraum formelmäßig gefasst sind).

        Vermutlich bin ich mit meinem Hinweis auf die Ostkirchen auch über das Ziel hinaus geschossen, weil du ja selbst sagtest, dass du dich auf den DACH-Bereich konzentriert hast.

        Rolf

        1. problematische Seite

          Vermutlich bin ich mit meinem Hinweis auf die Ostkirchen auch über das Ziel hinaus geschossen, weil du ja selbst sagtest, dass du dich auf den DACH-Bereich konzentriert hast.

          Ja. Natürlich. Ich wohne und lebe ja auch hier. Und ich befürchte ernsthaft, dass eine weltweite Berechnung einfach zu viele Ressorcen frisst - und damit meine ich ausdrücklich sowohl maschinelle als auch persönliche Ressourcen.

        2. problematische Seite

          So schwer ist die Osterformel nicht,

          ich habe jetzt statt easter_date() auf die PHP-eigene Funktion easter_days() gesetzt. easter_date() ist dann einfach und elegant mit dem Einzeiler:

          public function easterDate($y) {
              return ( mktime(0, 0, 0, 3, 21 + easter_days( $y ), $y ) );
          }
          

          zu ersetzen.

          easter_days() wiederum erzeuge ich nach der Abfrage, ob diese existiert, also auf hhvm. Da habe ich was gefunden...

          Das Problem ist damit elegant gelöst und auch die 1970-2037-Grenze von easter_date ist umgangen.

          Experimente mit einem großen jahr-Timestamp-array verliefen nicht befriedigend. (Laufzeit, Speicher)

          1. problematische Seite

            Experimente mit einem großen jahr-Timestamp-array verliefen nicht befriedigend. (Laufzeit, Speicher)

            Timestamps sind der Performancekiller für Datumsberechnungen ;)

            Rechne mit Julianischen Tagen, ich hab vor Jahren mal eine PHP-Lib entwickelt, Anwendungsbeispiel:

            try{
                $date = new Date_Kirche(array('date' => array(
                    30,11,2017
                )));
            
                $kirchenjahr = $date->kirchenjahr();
                ksort($kirchenjahr, SORT_NUMERIC);
                foreach($kirchenjahr as $jd => $name){
                    $d = new Date(array('julianday' => $jd));
                    echo "$d $name\n";
                }
            
            
            }
            catch(Exception $e){
                print $e->getMessage();
            }
            
            // Ausgabe:
            01.01.2017  So  52/2016 Neujahr
            06.01.2017  Fr  01/2017 Drei Königstag
            23.02.2017  Do  08/2017 Weiberfastnacht
            27.02.2017  Mo  09/2017 Rosenmontag
            14.04.2017  Fr  15/2017 Karfreitag
            16.04.2017  So  15/2017 Ostersonntag
            17.04.2017  Mo  16/2017 Ostermontag
            25.05.2017  Do  21/2017 Christi Himmelfahrt
            04.06.2017  So  22/2017 Pfingstsonntag
            05.06.2017  Mo  23/2017 Pfingstmontag
            15.06.2017  Do  24/2017 Fronleichnam
            15.08.2017  Di  33/2017 Maria Himmelfahrt
            22.11.2017  Mi  47/2017 Buß- und Bettag
            26.11.2017  So  47/2017 Totensonntag
            03.12.2017  So  48/2017 Erster Advent
            10.12.2017  So  49/2017 Zweiter Advent
            17.12.2017  So  50/2017 Dritter Advent
            24.12.2017  So  51/2017 Vierter Advent
            25.12.2017  Mo  52/2017 Erster Weihnachtstag
            26.12.2017  Di  52/2017 Zweiter Weihnachtstag
            
            

            Willste?

            1. problematische Seite

              Timestamps sind der Performancekiller für Datumsberechnungen ;)

              Ja. Aber SOOOOOO oft finden die gar nicht statt.

              • 1 x für Ostern. (1)
              • 1 x pro abhängigen Feiertag (Gesamt: 12)
              • 1 x für 4.Advent (1)
              • 1 x pro abhängigen Feiertag (Gesamt: 7)
              • 1 x für jeden abgefragten Tag (2016: 366)

              Macht: 381

              Ich glaube nicht, dass ich spürbar an Performance gewinne.

              Allerdings brauche ich einen Ersatz für PHP auf 32-Bit-Arms. Denn da versagt mktime(): es liefert für alles außerhalb von 1970 .. 2037 nur false.

              Das ist nicht dokumentiert. Bei mktime() steht:

              Achtung: Vor PHP 5.1.0 wurden negative Timestamps von keiner bekannten Windowsversion oder anderen Betriebssystemen unterstützt. Daher war der Bereich gültiger Jahresangaben auf Werte zwischen 1970 und 2038 beschränkt.

              "Vor PHP 5.1.0" ... Ich hab PHP 7.0.12-1+deb.sury.org~trusty+1 (cli) ( NTS ).

              Was hast Du also?

  5. problematische Seite

    Hallo und guten Tag J.,

    [...] Ein Skript, welches als Bibliothek gedacht ist um in PHP-Programmen für einzelne Tage oder ganze Kalender festzustellen, ob, wann und wo einer dieser störrischen Feier- und Gedenktage stattfindet. Die Daten und Regeln für die Feiertage habe ich zum Wohle der Österreicher und Schweizer in einer ini-Datei versenkt, die hoffentlich selbsterklärend ist...

    Das wäre eine Glanztat, die sicherlich für Aufmerksamkeit sorgen würde, wenn Du das Skript:

    • "Web 2.0"-fähig machen würdest
    • die Feiertage weltweit sammeln würdest
    • gezielte Recherchen auf Überlappungen ermöglichen würdest
    • die Zeitverschiebung dafür berücksichtigen würdest

    Das würde ganz vielen Kommunikationsverantwortlichen in Millionen Betrieben auf der Welt die Arbeit erleichern und der (weltweite) Dank würde Dir vermutlich ewig nachschleichen und Dich bei passenden Einträgen in "Donate Money for Benefits"-Portalen sogar erreichen!

    Ich hätte Spaß daran, bei einem solchen Projekt mitzuarbeiten!

    Und irgendwie haben die Algorithmen dafür mNm auch weite Gemeinsamkeiten mit dem Anliegen von Produktkonfigurator entwickeln

    Grüße
    TS

    --
    es wachse der Freifunk
    http://freifunk-oberharz.de
    1. problematische Seite

      https://www.google.de/search?q=site%3Ashop-website.de

      • von dort zu einem der webshops,
      • weiter zu einem Produkt,
      • dort dann auf "Preis für bedruckte Ware berechnen" klicken.
      • Im Quelltext schauen, was da mit JS stattfindet.

      Ist aber nicht sehr modern. Grund: Hab ich so anno 2003 gebaut.

    2. problematische Seite

      • "Web 2.0"-fähig machen würdest

      Die anfrage per get zu wollen und die Antwort in json umzufummeln und auszusenden ist die kleinste aller Schwierigkeiten...

  6. problematische Seite

    Ein Bekannter hat kürzlich auch so was gemacht. Vielleicht interessant: https://github.com/hausl/HolidayCalendar

    1. problematische Seite

      Ein Bekannter hat kürzlich auch so was gemacht. Vielleicht interessant: https://github.com/hausl/HolidayCalendar

      Hm.

      PHP Parse error: syntax error, unexpected '.', expecting ',' or ';' in /tmp/HolidayCalendar-master/HolidayCalendar.php on line 28

      Na gut. Ist ausdrücklich als ALPHA gekennzeichnet. Ich hab den Fehler korrigiert (s.u.) und es auch sonst durchgesehen. Sieht ganz nett aus und verfolgt doch tatsächlich einen, dem meinen sehr ähnlichen Ansatz.

      Meiner läuft inzwischen auch auf hhvm :-)

      Kannst Deinen Kumpel ja mal briefen:

      Zeile 28 ändern in:

      $filePath =  'config/',
      

      Unterhalb von Zeile 34 (innerhalb von __construct():

      $this -> $filePath = __DIR__ . '/' . $this -> $filePath;
      

      Ich mach das hier weil er keine Adresse angegeben hat.

      1. problematische Seite

        $this -> filePath = __DIR__ . '/' . $this -> filePath;
        

        natürlich ...

        Übrigens ist mein Ansatz deutlich schneller. Braucht nur 1/8 der Zeit um alle Tage eines Jahres darauf zu prüfen ob es Feiertage sind. Und meiner läuft mit hhvm.

      2. problematische Seite

        Kannst Deinen Kumpel ja mal briefen

        Das ist ein PHP 5.6-Feature (constant expressions). Ich kann es in der Form aber lokal auch nicht ausführen. Bin noch auf 5.5.

        Ich sage es ihm aber mal, weil ich schon finde, das man einige frühere Versionen ruhig auch noch unterstützen darf, wenn man sich dafür kein Bein ausreißen muss. Danke für den Hinweis.

      3. problematische Seite

        Hallo !Tagwächter, hallo mermshaus,

        danke für die Info, schaue ich mir an.. 5.6 sollte schon noch drinnen sein. (Mir persönlich ist/war PHP 7 wichtiger als HHVM ;) )

        Adresse von mir deshalb keine, da ich es gerne hätte das Anmerkungen, Kritik etc.. als Github-Issues erfasst werden.. zentral an einen Ort und von jedem der will.

        Zum Thema.. Ich habe deine Lib jetzt noch nicht genau angesehen, habe damals das ini-Format nicht genommen, weil es die Detailtiefe wie PHP-Arrays nicht sauber darstellen kannt. Da ging es mir dann zB um die Mehrsprachigkeit von Feiertagen - zumindest die Möglichkeit zu schaffen die deutschen Feiertage auch in englisch konfigurieren zu können. Und nochwas war.. weiß ich aber gerade nicht mehr, der Parsevorgang fällt weg, dafür ist es PHP-unkundigen ev. schwerer zu warten... ja seis drum.

        Generell die Detailtiefe dem User zu überlassen und nur den Rahmen und die Möglichkeiten zu schaffen, war mein oberstes Ziel ... Performance lag nicht im Haupt-Fokus, aktuelle, saubere Programmierung eher. Performancemäßig macht da auch PHP 7 sehr schon von der Stange weg sehr viel.

        Ansonsten .. das Ding ist eher spontan auch einem Forentrhead entstanden.. da ich reiner Hobby-PHP-Mensch bin... wer es brauchen kann fein, wer nicht.. ok ;)

        Als dann.. eine schönen Abend! LG hausl

      4. problematische Seite

        Hallo,

        ich habe es jetzt nochmals kurz (zu mehr leider keine Zeit) überflogen. Nachfolgendes noch:

        2017 ist der hl. Abend gleich mit dem 4. Advent. Das wird bei dir verschluckt.

        Ausgabe feiertage-test-1.php mit Datum 2017:

        Sun : 03.12.2017 :: 1. Advent
        	KF : kein Feiertag
        Sun : 10.12.2017 :: 2. Advent
        	KF : kein Feiertag
        Sun : 17.12.2017 :: 3. Advent
        	KF : kein Feiertag
        Sun : 24.12.2017 :: Heilige Nacht
        	KF : kein Feiertag
        	TVBW : Tanzverbot in Baden-Württemberg
        

        Es sollten immer mehr Feiertage/Sondertage an einem Datum möglich sein. Könnte ja zB auch leicht passieren, das jemand im zB Vereinskalender div. spezielle "Datums" darüber abbilden will, oder Namenstage etc.. dann kann das schnell mal kollidieren (meine Meinung).

        Muttertag, Advent, etc.. sind übrigens keine gesetzlichen Feiertage, das muss man sich in der Config als User selber richten wie "weit" man geht. Ev. will ja ein Tierfreund auch den "Tag des Hundes" feiern, dann steht ihm das natürlich frei.

        Um das Ganze sauber trennen zu können, kann man bei mir mehr Configs - beliebig viele - laden. Bei meinen Beispielen habe ich für at und de die gesetzlichen Feiertage in jeweiligen Dateien und noch eine als Beispiel mit "besonderen Tagen" - wie Advent, Muttertag, etc.. also die nicht gesetzlichen. Aber wie gesagt, das muss eh jeder selbst entscheiden - wie weit er die Feiertage haben will. Ich denke zB auf einer jüdischen etc.. Seite sind wieder ganz andere "Gedenktage" interessant.. und so weiter.

        Ich hab auch schon überlegt die Config auf eine SQLite Datei auszulagern.. Dann hätte man eine einzige Datei und PHP (da komm ich ja her) unterstützt diese von der Stange. Für das Datenvolumen ist das bei weitem ausreichend.. Das hab ich aber noch nicht fertig gedacht.. Und eine rohe Textdatei ist halt schon auch einfach und bequem zu formatieren.. Da reicht ein Editor ;)

        Achja.. die Sprache wollte ich noch erwähnen... Ich wollte es ermöglichen zB Feiertage von Spanien (per Definition) auf einer deutschen Seite mit deutschen Namen ausgeben zu können. Daher die grundsätzliche Möglichkeit der Mehrsprachigkeit.

        Und - was ich noch erwähnen möchte - aus deinem Interface kann man noch einiges herausholen. Zum Beispiel deine Testdatei 1 https://code.fastix.org/showFile.php?file=Projekte/PHP%3AFeiertage/test-feiertage-1.php sähe bei mir so in etwa aus:

        require_once __DIR__ . '/HolidayCalendar.php';
        $holiday->setDateTimezone( new DateTimeZone('Europe/Berlin') ); // optional -> Doku
        
        $holiday = new HolidayCalendar('de.php');
        $holiday->setFilter(['AU']);
        
        $aHolidays = $holiday->createHolidaysList(2017);
        
        foreach ($aHolidays as $aHoliday) {
            printf('%s: %s<br>', $aHoliday['date'], $aHoliday['name']);
        }
        

        Zu mehr hatte ich leider keine Zeit. Die Ostern-Berechnung mit der csv-Datei hast du wegen HHVM so gemacht was ich gesehen habe. Ich Nutze dafür das aus diesem Beispiel/Comment hier: http://php.net/manual/en/function.easter-date.php#refsect1-function.easter-date-notes

        (Sollte ich etwas in dem langen Thread übersehen haben was schon erwähnt wurde SORRY, ich muss gestehen hab ihn nicht zur Gänze gelesen.)

        LG

        1. problematische Seite

          Hi,

          Muttertag, Advent, etc.. sind übrigens keine gesetzlichen Feiertage

          aber sie fallen per Definition auf einen Sonntag, also einen gesetzlichen Ruhetag. Ist die Unterscheidung dann noch sinnvoll?

          Es geht doch beim Begriff Feiertag um zweierlei:

          • Ist es ein arbeitsfreier Tag? - Das trifft auf gesetzliche Feiertage zu, aber eben auch auf Pseudo-Feiertage wie den Muttertag, weil er immer auf einen Sonntag fällt. Die Frage, ob z.B. Muttertag ein gesetzlicher Feiertag ist, wäre unter diesem Aspekt irrelevant.
          • Ist es ein Gedenktag? - Wenn jemandem ein Feiertag in seiner Eigenschaft als Gedenktag wichtig ist, wird er/sie diesen Tag auf die eine oder andere Weise besonders behandeln. Auch für diese Frage ist es unerheblich, ob es sich um einen gesetzlichen Feiertag handelt.

          Ev. will ja ein Tierfreund auch den "Tag des Hundes" feiern, dann steht ihm das natürlich frei.

          Zum Beispiel. ;-)

          Bei meinen Beispielen habe ich für at und de die gesetzlichen Feiertage in jeweiligen Dateien und noch eine als Beispiel mit "besonderen Tagen" - wie Advent, Muttertag, etc.. also die nicht gesetzlichen.

          Welchen Grund könnte es noch geben, zwischen gesetzlichen und nicht gesetzlichen Feiertagen zu unterscheiden?

          EDIT: Ich ziehe die Frage zurück, mir ist eben klar geworden, dass sich die Antwort schon aus den beiden oben beschriebenen Aspekten ergibt. Wenn jemand den Tag des Hundes feiern will, ist es für denjenigen schon wichtig zu wissen, dass das im Gegensatz zu, sagen wir, Christi Himmelfahrt, eben kein gesetzlicher Feiertag ist, und er sich somit für seinen Wauwau freinehmen muss.
          /EDIT

          Achja.. die Sprache wollte ich noch erwähnen... Ich wollte es ermöglichen zB Feiertage von Spanien (per Definition) auf einer deutschen Seite mit deutschen Namen ausgeben zu können. Daher die grundsätzliche Möglichkeit der Mehrsprachigkeit.

          Interessanter Gedanke.

          So long,
           Martin

          --
          Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
          - (frei übersetzt nach Douglas Adams)
          1. problematische Seite

            Welchen Grund könnte es noch geben, zwischen gesetzlichen und nicht gesetzlichen Feiertagen zu unterscheiden?

            Vielleicht ist "Feiertag" inzwischen irreführend, das ist irgendwie so wie mit der Threaddrift. Man fängt mit etwas an und fragt sich: "He, Moment! Wenn ich das kann, dann kann ich ohne großen Aufwand auch noch jenes!")

            Es sieht wohl so aus, als würden hausl und ich die Feiertage nur als "Grundausstattung" betrachten. Auf Nutzerseite wäre die Ausgabe eines Kalenders(1) denkbar, bei dem besondere Tage und Feiertage farblich markiert sind und einen Tooltip haben oder auch die monatsweise Ausgabe mit vollständigen Angaben, oder eben der Jahresüberblick über alle Feier- und "Gedenktage". Da können die Anforderungen dann sehr individuell sein.

            Den Export als Kalenderdatei hat 1united angesprochen.

            Kalender meint sowas:

            Mo Di Mi Do Fr Sa So
                     01 02 03 04
            05 06 07 08 09 10 11
            12 13 14 15 16 17 18
            ...
            
            1. problematische Seite

              Welchen Grund könnte es noch geben, zwischen gesetzlichen und nicht gesetzlichen Feiertagen zu unterscheiden?

              Vielleicht ist "Feiertag" inzwischen irreführend, das ist irgendwie so wie mit der Threaddrift. Man fängt mit etwas an und fragt sich: "He, Moment! Wenn ich das kann, dann kann ich ohne großen Aufwand auch noch jenes!")

              Es sieht wohl so aus, als würden hausl und ich die Feiertage nur als "Grundausstattung" betrachten. Auf Nutzerseite wäre die Ausgabe eines Kalenders(1) denkbar, bei dem besondere Tage und Feiertage farblich markiert sind und einen Tooltip haben oder auch die monatsweise Ausgabe mit vollständigen

              Genau so ist es.. Ist zwar auch irgendwo Missbrauchs-Potenzial und irgendwo auch Off-Topic, kann aber zB für "einfach Serientermine" auch praktisch sein, wenn man nicht was selbst programmieren will.. keine Ahnung erster Sonntag im Mai ist immer Kirchtag etc.. Nur so als Beispiel.

              Ev. sollte ich noch ein Bemerkung/Notizfeld mit reinnehmen, das man Zusatzinfos erfassen kann. Muss ich mir überlegen.. ein Kalender-Tool wollte ich eigentlich ja auch nicht bauen.. (davon bin auch auch noch meilenweit weg und wird es nicht geben).

          2. problematische Seite

            aber sie fallen per Definition auf einen Sonntag, also einen gesetzlichen Ruhetag. Ist die Unterscheidung dann noch sinnvoll?

            Wenn du Arzt bist oder in der Gastronomie, dann kann das schon Relevanz haben ;) Ich weiß es gibt hier unendlich viele Auswüchse.. Beispielsweise ist der Karfreitag hier in Österreich nur für Evangelische Personen ein Feiertag, sonst nicht (http://www.feiertage-oesterreich.at/karfreitag/ ). Es gibt auch Pseudofeiertage in den Bundesländern wo man arbeiten muss, aber die Schulen zu haben - also für die Schulen/Schulkinder ein Feiertag, etc etc..

            Daher fand ich es sehr wichtig das man sich das alles selber konfig. kann wie man es schlussendlich haben will.

            1. problematische Seite

              Hallo,

              aber sie fallen per Definition auf einen Sonntag, also einen gesetzlichen Ruhetag. Ist die Unterscheidung dann noch sinnvoll?

              Wenn du Arzt bist oder in der Gastronomie, dann kann das schon Relevanz haben ;)

              da kann ich nicht ganz folgen. Arzt ... okay, Notdienst oder Bereitschaft oder sowas, klar. Und viele andere Berufsgruppen müssen ebenfalls auch am Sonntag arbeiten. Gastronomie hast du schon genannt, Polizei und andere Sicherheitskräfte, ÖPNV ... Aber für die armen Socken ist es dann auch unerheblich, ob der Sonntag, an dem sie Dienst schieben müssen, zusätzlich auch noch ein Feiertag ist oder nicht.

              Beispielsweise ist der Karfreitag hier in Österreich nur für Evangelische Personen ein Feiertag, sonst nicht (http://www.feiertage-oesterreich.at/karfreitag/ ).

              Huch? Personenabhängige Feiertage? Das habe ich auch noch nicht gehört. Interessant ...

              Es gibt auch Pseudofeiertage in den Bundesländern wo man arbeiten muss, aber die Schulen zu haben

              Ja, das nennt man Schulferien. ;-)

              Daher fand ich es sehr wichtig das man sich das alles selber konfig. kann wie man es schlussendlich haben will.

              Ja, finde ich auch gut. Mich hat eben nur die Sache mit den nicht-gesetzlichen Sonntags-Feiertagen gestört, das kam mir etwas spitzfindig vor.

              So long,
               Martin

              --
              Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
              - (frei übersetzt nach Douglas Adams)
              1. problematische Seite

                Ja, finde ich auch gut. Mich hat eben nur die Sache mit den nicht-gesetzlichen Sonntags-Feiertagen gestört, das kam mir etwas spitzfindig vor.

                Interessiert eine Menge Leute -> An manchen ist "Tanzverbot".

              2. problematische Seite

                da kann ich nicht ganz folgen. Arzt ... okay, Notdienst oder Bereitschaft oder sowas, klar. Und viele andere Berufsgruppen müssen ebenfalls auch am Sonntag arbeiten. Gastronomie hast du schon genannt, Polizei und andere Sicherheitskräfte, ÖPNV ... Aber für die armen Socken ist es dann auch unerheblich, ob der Sonntag, an dem sie Dienst schieben müssen, zusätzlich auch noch ein Feiertag ist oder nicht.

                Bei der Gehaltsabrechnung u.U. schon ;) Aber das ist hier irrelevant. Mit geht es halt auch um die Definition. Frei hat man ja jeden Sonntag (der "Normalo"). Und man hat frei wegen Sonntag und nicht wegen Muttertag. Das solche "Sondertage" einfach per Definition keine gesetzl. Feiertage sind. Das mag spitzfindig sein ok, aber ist halt so ;)

                Ja, das nennt man Schulferien. ;-)

                Eben nicht. Es ist tatsächlich ein Feiertag, an dem halt nicht arbeitsfrei ist. http://www.feiertage-oesterreich.at/st-rupert-24-september/ Ähnliche Szenarien gibt es mit Bankenfeiertagen in gewissen Ländern etc.. Feiertage an denen "wenige" frei haben.

                Da geht es halt auch um die Definition an sich. Aber wie gesagt, es steht jedem frei sich das selbst zu gliedern, notieren, wie es einem passt.

            2. problematische Seite

              Hallo,

              Beispielsweise ist der Karfreitag hier in Österreich nur für Evangelische Personen ein Feiertag, sonst nicht (http://www.feiertage-oesterreich.at/karfreitag/ ).

              Das hast du falsch zusammengefasst. Da solltest du deine selbstverlinkte Seite lieber nochmal genau lesen!

              Auch in Bayern gibt es Feiertage, die abhängig von der Konfessionsverteilung in manchen Orten gelten und im nachbarort dann wiederum nicht.

              Gruß
              Kalk

              1. problematische Seite

                Auch in Bayern gibt es Feiertage, die abhängig von der Konfessionsverteilung in manchen Orten gelten und im nachbarort dann wiederum nicht.

                Und den 8.8. der in der Stadt Augsburg, aber nicht in den Gewerbegebieten (in denen die Augsburger arbeiten...) Feiertag ist.

              2. problematische Seite

                Hi,

                Auch in Bayern gibt es Feiertage, die abhängig von der Konfessionsverteilung in manchen Orten gelten und im nachbarort dann wiederum nicht.

                ja, aber dann für die ganze Gemeinde, und nicht individuell pro Person nach deren Konfession. Das gibt es in DE meines Wissens nicht.

                So long,
                 Martin

                --
                Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
                - (frei übersetzt nach Douglas Adams)
              3. problematische Seite

                Das hast du falsch zusammengefasst. Da solltest du deine selbstverlinkte Seite lieber nochmal genau lesen!

                Und was ist an meiner Aussage falsch?

                Auch in Bayern gibt es Feiertage, die abhängig von der Konfessionsverteilung in manchen Orten gelten und im nachbarort dann wiederum nicht.

                Dem hab ich auch nicht widersprochen.

                1. problematische Seite

                  Beispielsweise ist der Karfreitag hier in Österreich nur für Evangelische Personen ein Feiertag Das hast du falsch zusammengefasst. Da solltest du deine selbstverlinkte Seite lieber nochmal genau lesen!

                  Und was ist an meiner Aussage falsch?

                  Ich fasse das hier mal in Code:

                  "Evangelische Person" != "Person in Ort mit überwiegend evangelischer Bevölkerung"
                  
                  1. problematische Seite

                    Beispielsweise ist der Karfreitag hier in Österreich nur für Evangelische Personen ein Feiertag

                    Ich sprach - wie in dem verlinkten Text - von den Personen.

                    Gesetzliche Regelung Karfreitag ist ein Feiertag für Angehörige der Evangelischen Kirche H. B. und A. B., der Altkatholischen Kirche sowie der Methodistenkirche und für diese ein arbeitsfreier Tag.

                    Somit habe ich es korrekt wiedergegeben.

                    1. problematische Seite

                      Somit habe ich es korrekt wiedergegeben.

                      Stimmt,

                      Da haben wir wohl die deutsche Weise der Regelung (örtlich) voreilig als in Österreich angewendet angenommen. In Österreich hängt es aber an der Person.

                      1. problematische Seite

                        Es gibt da so viele Szenarien, ich denke man sollte sich da nicht verbeissen. Wichtig ist das man es - wenn man es "so" oder "so" darstellen will auch do darstellen können, der Rest ist dann Config Pflege.

                  2. problematische Seite

                    Beispielsweise ist der Karfreitag hier in Österreich nur für Evangelische Personen ein Feiertag Das hast du falsch zusammengefasst. Da solltest du deine selbstverlinkte Seite lieber nochmal genau lesen!

                    Und was ist an meiner Aussage falsch?

                    Ich fasse das hier mal in Code:

                    "Evangelische Person" != "Person in Ort mit überwiegend evangelischer Bevölkerung"
                    

                    Wobei natürlich auch gilt:

                    "gesetzlicher Feiertag" != "kirchlicher Feiertag"
                    

                    Unter der Prämisse stimmt Deine Aussage nämlich: Für Evangelische Personen ist der Karfreitag ein Feiertag. Feiern die Katholen den eigentlich nicht?

                    Ich lese:

                    Der Karfreitag (althochdeutsch kara ‚Klage‘, ‚Kummer‘, ‚Trauer‘) ist der Freitag vor Ostern. Er folgt auf den Gründonnerstag und geht dem Karsamstag voraus. Christen gedenken an diesem Tag des Kreuzestodes Jesu Christi.

                    Der Karfreitag wird auch „Stiller“ oder „Hoher Freitag“ genannt. In der katholischen Kirche ist er ein strenger Fast- und Abstinenztag. Unter Einbeziehung des Gründonnerstagabends ist der Karfreitag der erste Tag der österlichen Dreitagefeier (Triduum Sacrum oder Triduum paschale), die in ihrer Gesamtheit in allen christlichen Konfessionen das höchste Fest des Kirchenjahres darstellt und wie ein einziger Gottesdienst gefeiert wird.

                    1. problematische Seite

                      Feiern die Katholen den eigentlich nicht?

                      Den Karfreitag? Ich würde mal sagen nicht wirklich.. Wäre mir noch nie aufgefallen ;)

                      Es gibt hier den "Usus" am Karfreitag und Aschermittwoch kein Fleisch zu essen, aber ich denk das beachtet kaum noch jemand. Macht ja auch keinen Sinn sich darauf rauszureden und dann einen Lachsschmaus anzurichten. Im Grunde geht es - wie dort steht - eher ums trauern, fasten etc.. Aber das merkt man gar nicht. Und arbeiten muss man auch noch ;)

                      Weihnachten wird auch weit breiter und intensiver gefeiert als Ostern.. Obwohl Ostern das höchste Kirchenfest ist.

                      1. problematische Seite

                        Hallo,

                        Feiern die Katholen den eigentlich nicht?

                        Den Karfreitag? Ich würde mal sagen nicht wirklich.. Wäre mir noch nie aufgefallen ;)

                        ist ja hier ähnlich. Es gibt natürlich sowohl bei den Protestanten wie auch bei den Katholiken einen gewissen Prozentsatz an Menschen, die ihren christlichen Glauben und damit verknüpfte Traditionen sehr ernst nehmen, und die feiern den Karfreitag natürlich auch. Aber ich wüsste jetzt nicht einmal, auf welche Weise - außer mit dem Besuch eines dedizierten Karfreitags-Gottesdienstes.

                        Ich denke aber, dass der weitaus größere Anteil der Bevölkerung diese kirchlichen Traditionen gar nicht praktiziert, oder sogar (wie ich) kaum kennt.

                        Es gibt hier den "Usus" am Karfreitag und Aschermittwoch kein Fleisch zu essen, aber ich denk das beachtet kaum noch jemand. Macht ja auch keinen Sinn sich darauf rauszureden und dann einen Lachsschmaus anzurichten.

                        Was mich wieder zur Frage bringt: Wieso kein Fleisch, dafür aber Fisch? Für mich schließt der Begriff Fleisch durchaus auch Fisch und Geflügel ein. Wenn also jemand sagt, er sei Vegetarier oder esse während der Fastenzeit kein Fleisch, bringt dann aber Fisch auf den Tisch, dann ist das für mich ein Widerspruch.

                        Weihnachten wird auch weit breiter und intensiver gefeiert als Ostern.

                        Ja. Aber Weihnachten ist auch - deutlich stärker als Ostern - in den letzten 100 Jahren mehr und mehr zum Kommerzfest geworden.

                        Obwohl Ostern das höchste Kirchenfest ist.

                        Das ist es wohl - obwohl ich auch lange Zeit dachte, Weihnachten sei es.

                        Ciao,
                         Martin

                        --
                        Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
                        - (frei übersetzt nach Douglas Adams)
                  3. problematische Seite

                    Hallo,

                    Ich fasse das hier mal in Code:

                    "Evangelische Person" != "Person in Ort mit überwiegend evangelischer Bevölkerung"
                    

                    in der von hausl verlinkten österreichischen Definition des Karfreitags steht aber nichts von Orten mit überwiegend evangelischer oder katholischer Bevölkerung, sondern von Angehörigen der jeweiligen Kirchen. Also Personen.

                    So long,
                     Martin

                    --
                    Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
                    - (frei übersetzt nach Douglas Adams)
                    1. problematische Seite

                      in der von hausl verlinkten österreichischen Definition des Karfreitags steht aber nichts von Orten mit überwiegend evangelischer oder katholischer Bevölkerung, sondern von Angehörigen der jeweiligen Kirchen. Also Personen.

                      Du hast Recht.

                2. problematische Seite

                  Hallo,

                  Und was ist an meiner Aussage falsch?

                  du behauptest, es gelte nur für evangelische Personen.

                  Gruß
                  Kalk

                  1. problematische Seite

                    Und was ist an meiner Aussage falsch?

                    du behauptest, es gelte nur für evangelische Personen.

                    Also

                    Gesetzliche Regelung
                    Karfreitag ist ein Feiertag für Angehörige der Evangelischen Kirche H. B. und A. B., der Altkatholischen Kirche sowie der Methodistenkirche und für diese ein arbeitsfreier Tag.

                    Ja, jetzt bin ich dabei.. Ja ich meinte damit die Menge der Masse aus Katholiken und Evangelisten. Die anderen dort angeführten Religionen kenne ich in der Praxis gar nicht, das sind wohl theor. Randgruppen - was natürlich nicht heißt es gibt da niemanden.

                    Also: Damit meinte ich aus der breiten Masse der Katoliken und Evanglisten haben "nur" die Ev. frei, die Kath. nicht. ok? (Von wegen ich bin spitzfindig ...)

                    1. problematische Seite

                      Hallo,

                      Gesetzliche Regelung
                      Karfreitag ist ein Feiertag für Angehörige der Evangelischen Kirche H. B. und A. B., der
                      Altkatholischen Kirche sowie der Methodistenkirche und für diese ein arbeitsfreier Tag.

                      Also: Damit meinte ich aus der breiten Masse der Katoliken und Evanglisten haben "nur" die Ev. frei, die Kath. nicht. ok?

                      Sind Altkatholiken für dich keine Katholiken?

                      Gruß
                      Kalk

                      1. problematische Seite

                        Sind Altkatholiken für dich keine Katholiken?

                        Ich denke du weißt was ich meine. Wenn du den Tag gerne als Feiertag in deine Config so definieren willst, dann gut so. So Meta-Diskussionen sind immer etwas Mühsam und bringen unterm Strich genau gar nichts für die Lib. Eine Glaubenseinschränkung auf eine Religion o.ä. kann man sich ja über den Filter nach belieben selbst machen.

        2. problematische Seite

          An Deinem Skript ist die Verwendung von Strings wie '11/26, next Sunday, +3 weeks' eine sehr interessante Sache. Wobei der konkrete 4. Advent einfacher zu errechnen ist - und der kommt wegen der daran hängenden Feiertage als Anker in Betracht. Ich muss mal sehen wie ich das mit den Zeitumstellungen, Muttertag & Co. mache.

          2017 ist der hl. Abend gleich mit dem 4. Advent. Das wird bei dir verschluckt.

          Teufel auch!

          Genau gestern saß hier jemand an meinem Küchentisch und fragte mich, ob denn das stimme, dass 2017 der vierte Advent und Heiligabend auf einen Tag fallen. Das hatte ich natürlich überprüft und darauf hin erst mal die Reihenfolge der Überprüfungen gedreht (Weil da nur der 4. Advent rauskam, Heilignacht aber irgendwie wichtiger ist). Und ich habe das Problem bzw. dessen Lösung auf den "ToDo- Zettel" geschrieben. Ich muss die Ausgabe wohl auf ein Array umstellen, denn:

          Es sollten immer mehr Feiertage/Sondertage an einem Datum möglich sein.

          Genau. Denn was geschieht wenn jemand Geburtstage hinzufügt?

          Muttertag, Advent, etc.. sind übrigens keine gesetzlichen Feiertage, das muss man sich in der Config als User selber richten wie "weit" man geht. Ev. will ja ein Tierfreund auch den "Tag des Hundes" feiern, dann steht ihm das natürlich frei.

          Dafür habe ich die 'Codes' ...

          Um das Ganze sauber trennen zu können, kann man bei mir mehr Configs - beliebig viele - laden.

          Ja. Die Sache mit der Konfiguration und deren Änderung zur Laufzeit ist und bleibt Thema für Überlegungen.

          Die Ostern-Berechnung mit der csv-Datei hast du wegen HHVM so gemacht was ich gesehen habe.

          Du meinst den Ordner helpers. Mit den Resten meiner Tests.

          Da sind eigentlich nur "Experimente" drin. Ich habe ja das Problem, dass auf dem 32-Bit Armel ab 2038 quasi alle Datumsfunktionen versagen und weiß inzwischen woran das liegt: PHP nimmt die Funktionen aus libc - und die versagen auf dem Ding auch. Betroffen ist sogar mktime() - das ist derart "essentiell", dass ich schon eine Menge Zeit in das Problem versenkt habe. Vor allem ist dieses Desaster in PHP nicht (wirklich) dokumentiert. Nur bei easter_date() steht es.

          Für hhvm bzw. die dort fehlende Funktion easter_days() verwende ich einen Ersatz von rabbit-aaron:

          if (! function_exists( 'easter_days' ) ) {
           
              /**
              *    code by rabbit-aaron, https://github.com/rabbit-aaron
              *    based on code by Simon Kershaw, <webmaster@ely.anglican.org>
              *    License: https://github.com/rabbit-aaron/hhvm-php-easter/blob/master/LICENSE
              **/
           
              function easter_days( $year = NULL, $method = CAL_EASTER_DEFAULT )  {
              ...
          

          Ich wollte eigentlich nur wissen, ob es mit der Funktion oder dem Array signifikante Zeitunterschiede gibt - und das ist nicht der Fall. Die Berechnung ist sogar schneller.

          1. problematische Seite

            Da sind eigentlich nur "Experimente" drin. Ich habe ja das Problem, dass auf dem 32-Bit Armel ab 2038 quasi alle Datumsfunktionen versagen und weiß inzwischen woran das liegt: PHP nimmt die Funktionen aus libc - und die versagen auf dem Ding auch. Betroffen ist sogar mktime() - das ist derart "essentiell", dass ich schon eine Menge Zeit in das Problem versenkt habe. Vor allem ist dieses Desaster in PHP nicht (wirklich) dokumentiert. Nur bei easter_date() steht es.

            Ich nutze auch daher u.a. prinzipiell die DateTime-Klasse von PHP, da funktioniert auch auf 32bit Systemen Daten "Datums" > 2037.

            Und easter_days() sollte auch dafür benutzbar sein.

            Die Funktion kann an Stelle von easter_date() genutzt werden um auch für Jahre außerhalb des Wertebereichs von Unix Timestamps (also vor 1970 bzw. nach 2037) das Osterdatum zu bestimmen.

            http://php.net/manual/de/function.easter-days.php

            1. problematische Seite

              Ich nutze auch daher u.a. prinzipiell die DateTime-Klasse von PHP, da funktioniert auch auf 32bit Systemen Daten "Datums" > 2037.

              Nicht auf dem Banana ... Weiß der Teufel, was die Burschen kompiliert haben.

              <?php
              $t = mktime( 1,1,1,5,5,2039 );
              echo "mktime( 1,1,1,5,5,2039 )    : ", $t, "-> ", date( 'Y-m-d H:i:s', $t ), " \n";
              
              $t = DateTime::createFromFormat('m/d/Y', '1/5/2039');
              $t->setTime(1, 1, 1);
              echo '("m/d/Y", "1/5/2039") $publishDate->getTimestamp(); -> >>', $t->getTimestamp(), "<<\n";
              

              Ausgaben auf dem Banana:

              php time_test.php
              mktime( 1,1,1,5,5,2039 )    : -> 1970-01-01 01:00:00
              ("m/d/Y", "1/5/2039") $publishDate->getTimestamp(); -> >><<
              

              ist aber kein Fehler von mir, denn mit 64 Bit:

              php /tmp/time_test.php 
              mktime( 1,1,1,5,5,2039 )    : 2188166461-> 2039-05-05 01:01:01 
              ("m/d/Y", "1/5/2039") $publishDate->getTimestamp(); -> >>2177798461<<
              

              Und easter_days() sollte auch dafür benutzbar sein.

              Ja. Ist es. DAS geht.

      5. problematische Seite

        Da ich oben nicht mehr editieren konnte:

        Gewisse Daten kann man auch mit relativen Ausdrücken abbilden, das fehlt bei dir noch was ich gesehen habe. Du hast Ostern und den 4. Advent als "Anker". Also sowas zB:

        Auszug aus meiner Doku:

        Relative Datumsausdrücke
          Beginn Sommerzeit:  'last sunday of march'
          Muttertag:  'second sunday of may'
         
        Relative-Ketten
          4. Advent:  '11/26, next Sunday, +3 weeks'
          Die Ausdrücke werden je Beistrich einzeln nacheinander ausgeführt.
          Ausgangszeitpunkt ist der 01.01. des abgefragen Jahres.
        

        PS: Falls es ja jemanden noch interessiert.. Aus diesem Thread ging das Ganze hervor, da gab es auch Diskussionen, alternative Ansätze etc, etc..

        https://www.php.de/forum/webentwicklung/software-design/1470286-feiertage

        LG

        1. problematische Seite

          Relative Datumsausdrücke
            Beginn Sommerzeit:  'last sunday of march'
            Muttertag:  'second sunday of may'
           
          Relative-Ketten
            4. Advent:  '11/26, next Sunday, +3 weeks'
            Die Ausdrücke werden je Beistrich einzeln nacheinander ausgeführt.
            Ausgangszeitpunkt ist der 01.01. des abgefragen Jahres.
          

          An sowas plane und überlege ich noch. Ich werde mir zusätzlich mal ansehen ob man eventuell die Crontab-Syntax sinnvoll ein- und umsetzen setzen kann...

          Die Version ist auf 0.4 gesetzt:

          1. problematische Seite

            Jetzt Version 0.6

            • Ereignisse mit fixem Datum.
            • Ereignisse, die mit Datum ab Ostern/Ewigkeitssonntag definiert sind.
            • Ereignisse, die mit "2. Sonntag im Mai" oder 'letzter Sonntag' im Oktober. (Muttertag, Sommerzeit)
            • Jährliche Wiederholungen wie Geburtstage mit Berechnung der Wiederholung (z.B. des wievielten Geburtstags) und konfigurierbarer Ausgabe mit sprintf ('%d. Geburtstag von Martin Luther')
            • periodische Wiederholungen mit Perioden von Tagen oder Monaten. ('Gelber Sack')

            Ach so. Ich habe mich für die "Crontab-Methode entschieden". Also keine Kettenangaben.

            1. problematische Seite

              Jetzt Version 0.6

              • Ereignisse mit fixem Datum.
              • Ereignisse, die mit Datum ab Ostern/Ewigkeitssonntag definiert sind.
              • Ereignisse, die mit "2. Sonntag im Mai" oder 'letzter Sonntag' im Oktober. (Muttertag, Sommerzeit)
              • Jährliche Wiederholungen wie Geburtstage mit Berechnung der Wiederholung (z.B. des wievielten Geburtstags) und konfigurierbarer Ausgabe mit sprintf ('%d. Geburtstag von Martin Luther')
              • periodische Wiederholungen mit Perioden von Tagen oder Monaten. ('Gelber Sack')

              Ach so. Ich habe mich für die "Crontab-Methode entschieden". Also keine Kettenangaben.

              Jetzt Version 0.7

              Ich habe doch einen Offset für die Termine eingebaut, die von etwas abhängig sind, wie dem n-ten Wochentag eines Monats. Damit lässt sich auch der angesprochene "vorletzte Sonntag eines Monats" realisieren, das ist einfach der letzte Sonntag, Offset ist -7.

  7. problematische Seite

    Habt Ihr irgendwelche Anregungen, die über die zur Laufzeit austauschbare ini-Datei hinausgehen?

    Ja noch was: Ich habe über meine Kalenderprogramme sehr viele Anfragen zu Christlichen Feiertagen in Jahren weit vor 1970.

    1. problematische Seite

      Ja noch was: Ich habe über meine Kalenderprogramme sehr viele Anfragen zu Christlichen Feiertagen in Jahren weit vor 1970.

      Wann war denn der Ostersonntag im Jahr 302?