Ankündigung

Einklappen
Keine Ankündigung bisher.

holiday-calendar

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • holiday-calendar

    Zitat von jspit Beitrag anzeigen
    Schau mal hier holiday-calendar.
    Frage an den Autor vom holiday-calendar (also hausl)

    Kann Deine Klasse auch bewegliche und bedingte Feiertage? Hab nix dazu entdecken können.

  • #2
    ----
    MOD:
    Ich habe diese Thematik von diesem Thread herausgetrennt.
    ----

    Was ist ein bedingter Feiertag?

    Du kannst all diese Ausdrücke "Date Expressions" verwenden um einen Feiertag in der Config anzulegen. https://github.com/hausl/holiday-calendar#config-files

    Wenn die Definition / Logik des Feiertages irgendwie "greifbar" ist kannst du ihn vermulich in der Config auch so hinterlegen.
    Die für DE und AT sind - zumindest der Basissatz - in den beiden BeispielConfigs vorhanden.

    Ich muss dazu sagen das Ding entstand spontan, ich nutze das nicht produktiv.. (Ich nutze gar kein PHP produktiv )
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Mit Bedingte Feiertage meine ich z.B. welche die nur in einem Bestimmten Jahr oder Jahresbereich gültig sind (Japan hat da z.B. einige) oder Feiertage die wenn sie auf einen Sonntag fallen zum Montag verschoben werden (Japan, UK, …) usw. usf. da gibts noch einige Bedingungen mehr für andere Länder

      Kommentar


      • #4
        So ein bedingter Feiertag war ja 2017 der Reformationstag der nicht nur für bestimmte sondern für alle Bundesländer gültig war.
        Dies wurde so in der Config von holiday-calendar. verankert.
        PHP-Code:
        [
                    
        'names'  => ['de' => 'Reformationstag'],
                    
        'date'   => '10-31',
                    
        'filter' => ['BW''BB''MV''SN''ST''TH']
                ],
                [
                    
        // https://de.wikipedia.org/wiki/Reformationstag#Deutschland
                    
        'names'  => ['de' => 'Reformationstag 2017'],
                    
        'date'   => '2017-10-31',
                    
        'filter' => ['BY','BE','HB','HH','HE','NI','NW','RP','SL','SH']
                ], 
        Für Feiertage die automatisch auf den nächsten Werktag verschoben werden falls diese auf ein Wochenende fallen, dafür denke ich, muss die Klasse angefasst werden.

        Edit: bewegliche Feiertage (Also alle kirchlichen Feiertage mit Basis Ostern) kann die Klasse. In der Konfiguration werden diese Tage mit einen E für Easter und einen Versatz eingetragen. Beispiel E+50 Pfingsmontag.

        Kommentar


        • #5
          jspit
          Messier 1001

          Zitat von jspit Beitrag anzeigen
          Für Feiertage die automatisch auf den nächsten Werktag verschoben werden falls diese auf ein Wochenende fallen, dafür denke ich, muss die Klasse angefasst werden.
          Das seh ich auch so. Ich hatte das ja eigentlich anders geplant das die Configs direkt auch via Objektmethoden dann erzeugt wird und da/die könnte man dan für so Sonderfälle erweitern. Das hab ich aber aus Zeitmangel (ich brauch immer - auf Grund Skillsmangel - ewig für so Zeug ) dann verworfen.

          So irgendwie - die Hauptklasse übergibt quasi nur das Jahr und die Namen der zu ladenden Configs und die Configs sehen dann in etwas so aus...

          PHP-Code:
          // Config für DE

          // ...

          // 25.12. Weihnachtstag
          $holiday = new Holiday();
          $holiday->setNames( ['de' => 'Chrisstag''en' => 'wie auch immer Day'] );

          $holiday->setRegions();  // kenie Region = national = alle, sonst ['BW', 'BY, '...']

          // hier würde man die Definition angeben ...*/
          $holiday->setFixDate('12-25');

          /*
          und könnte dann noch sonderfälle reinprogrammieren..
          zB wenn Sa oder So. dann ->modify('next monday') oder wie auch immer
          */
          $holiday->save(); // schreibt dann das Datuem ins Array für die eigentliche Suche/Ausgabe etc.. wie jetzt auch schon

          // und hier dann der nächste Feiertag  - und so weiter
          // ... 
          Diese würde dann von der Klasse includiert werden und so weiter... Aber wie gesagt das hab ich nie wirklich ganz fertig gedacht.
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Hi,
            mal einige Gedanken zur Ermittlung der Feiertage für mehrere Länder und Sprachen.
            • Für den allgemeinen Fall würde ich Region und Sprache trennen und unterschiedlich behandeln. So kann als Beispiel für eine Region in der Schweiz eine der möglichen Sprachen gewählt werden.
            • Für die Regionen bietet sich an eine Liste mit Bezeichnern nach ISO 3166 vorzusehen.
            • Ein Datum für einen Feiertag wird durch die Einträge year, month, day und special festgelegt. Unter special wird eine Kette von Modifizierern und Platzhaltern abgelegt. Das Jahr kann leer bleiben (= alle), ein bestimmtes Jahr oder eine Liste von Jahren enthalten.
            • Mit einem Eintrag notyear können Ausnahmen (Bedingte Feiertage) für bestimmte Jahre realisiert werden.
            • Die Konfiguration wird nicht in mehreren Dateien verwaltet, sondern für alle Regionen und Sprachen in einer einzigen SQLite-Datenbank. Für die Datenbank wird zugunsten nutzerfreundlicher Administration auf eine strenge Normalisierung verzichtet.
            Bin dabei dies mal umzusetzen. Ziel ist es, die Feiertagsdefinitionen zu 100% per Datenbankeintrag realisieren zu können ohne den PHP-Code anzufassen.
            Wer aus seiner Arbeit spezielle Anforderungen oder auch Vorschläge hat kann diese hier einbringen. Suche noch komplizierte Fälle um das Konzept auf seine Brauchbarkeit zu testen.

            LG jspit

            Kommentar


            • #7
              Zitat von jspit Beitrag anzeigen
              [*]Für den allgemeinen Fall würde ich Region und Sprache trennen und unterschiedlich behandeln. So kann als Beispiel für eine Region in der Schweiz eine der möglichen Sprachen gewählt werden.
              Mit Sprache meinst du rein den Namen des Feiertages? Ja, das seh ich genauso der Name hat mit der Region ja "eigentlich" eh nichts zu tun. Ich seh es auch so wenn ich zB eine deutsche Website auch auf englischsprachig anbiete, dann könnte ich den Namen des Feiertages auch auf englisch angeben. Daher sollte die Sprache auch konfigurierbar sein.

              Die Konfiguration wird nicht in mehreren Dateien verwaltet, sondern für alle Regionen und Sprachen in einer einzigen SQLite-Datenbank.
              Daran dachte ich auch schonmal, aber ging leider aus wie das andere Thema oben .. Zeitproblem.

              Bin dabei dies mal umzusetzen. Ziel ist es, die Feiertagsdefinitionen zu 100% per Datenbankeintrag realisieren zu können ohne den PHP-Code anzufassen.
              Wer aus seiner Arbeit spezielle Anforderungen oder auch Vorschläge hat kann diese hier einbringen. Suche noch komplizierte Fälle um das Konzept auf seine Brauchbarkeit zu testen.
              Find ich "Cool"
              Ein Punkt der mir spontan einfällt, weil ich damit auch mein Konzept damals etwas brechen musste .. Anker (wie der Ostern) und relative Datums, die darauf basieren. zB haben ja die Russen andere Ostern und damit vermutlich auch anderer "Ankertage" als unser Ostern. Will man beispielsweise ein Datum basierend auf einen solchen fremden Anker definieren, muss man zuerst / auch den fremden Anker "fixieren". So wie hier: https://github.com/hausl/holiday-calendar#date-anchor

              Und was mir noch einfällt wäre Logik im Ausdruck, wie hier oben erwähnt: "Wenn der Feiertag auf einen Sonntag fällt dann ist es immer der darauf folgende Montag". Für so eine Logik brauchst du PHP, oder du erfindest eine Syntax die du dann parsen kannst. Ich glaube mit einer reinen Datumsausdruckskette geht das nicht.

              Find das Thema jedenfalls recht interessant, vor allem weil ich damals schon nicht gebaut bekam, was ich eigentlich wollte
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Wie löst du das Problem der unterschiedlichen Kalender. Zum Beispiel für Israel, Saudi Arabien oder Myanmar, deren Feiertage nicht unserem Kalender folgen, ich glaube SQLite kann das nicht unterschiedlich handhaben.
                Willst du das wirklich für alle Staaten und Regionen machen. Spanien ist das auch so ein Problem, schon Ostern wird dort unterschiedlich als Feiertage ausgelegt.

                Ansonsten ehrgeiziges Projekt, das auf jeden Fall meinen Respekt verdient.

                Kommentar


                • #9
                  Zitat von hausl Beitrag anzeigen
                  Ein Punkt der mir spontan einfällt, weil ich damit auch mein Konzept damals etwas brechen musste .. Anker (wie der Ostern) und relative Datums, die darauf basieren. zB haben ja die Russen andere Ostern und damit vermutlich auch anderer "Ankertage" als unser Ostern. Will man beispielsweise ein Datum basierend auf einen solchen fremden Anker definieren, muss man zuerst / auch den fremden Anker "fixieren".
                  Für die beweglichen Feiertage kenne ich nur 2. Referenzen, das westliche + orthodoxe Ostern. Anstelle von E+49 usw. tritt dann für das orthodoxe Pfingsten der Ausdruck "{{easter_o}|+49 dyas".


                  Zitat von hausl Beitrag anzeigen
                  Und was mir noch einfällt wäre Logik im Ausdruck, wie hier oben erwähnt: "Wenn der Feiertag auf einen Sonntag fällt dann ist es immer der darauf folgende Montag". Für so eine Logik brauchst du PHP, oder du erfindest eine Syntax die du dann parsen kannst. Ich glaube mit einer reinen Datumsausdruckskette geht das nicht.
                  Solche Bedingungen treffen nur für sehr wenige Jahre zu und eine verbindliche Regel ohne Ausnahmen konnte ich nicht finden. Das vereinigte Königreich hat wohl eine solche schöne Regel, dass wenn Weihnachten auf ein Sonntag oder Wochenende? fällt das denn der nächte Montag/Dienstag ein sog. Bankfeiertag ist. Dafür denke ich ist es nicht zuviel verlangt für diese Jahre einen fixen Eintrag zu spendieren.
                  Wenn das Orginal dann rausfallen soll, kann das betreffende Jahr im Feld notyear eingetragen werden.

                  Kommentar


                  • #10
                    protestix Das ist meines Erachtens dann die Verantwortung von dem der die Definition pflegt.

                    Achtung: In Spanien werden die Feiertage jedes Jahr neu festgelegt !
                    Spanien kennt nationale, regionale und lokale Feiertage. Jede Gemeinde kann maximal 14 Feiertage bestimmen, wobei bis zu neun von der Landesregierung vorgegeben werden.
                    https://www.feiertagskalender.ch/ind...=de&hidepast=1

                    Das sind Ausnahmen die kann man einfach nicht autom. abdecken, hilft nicht.

                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Zitat von protestix Beitrag anzeigen
                      Wie löst du das Problem der unterschiedlichen Kalender. Zum Beispiel für Israel, Saudi Arabien oder Myanmar, deren Feiertage nicht unserem Kalender folgen, ich glaube SQLite kann das nicht unterschiedlich handhaben.
                      Willst du das wirklich für alle Staaten und Regionen machen. Spanien ist das auch so ein Problem, schon Ostern wird dort unterschiedlich als Feiertage ausgelegt.

                      Ansonsten ehrgeiziges Projekt, das auf jeden Fall meinen Respekt verdient.
                      Nun, SQLite dient nur als Datencontainer ohne größere Intelligenz. Beim Erstellen der Klasseninstanz werden alle Einträge für eine Region in ein Array gepackt und dann mit dem Array weitergearbeitet.
                      Und ich habe nicht vor die Datenbank mit allen Regionen der Erde zu füllen, das würde ich wohl selbst bis zum Ende meiner Tage nicht schaffen.
                      Das muss dann schon jeder selbst machen, der es benötigt.
                      Ich schau mir mal die Feiertage von Israel an, ob es mit den Konzept realisierbar ist.

                      Kommentar


                      • #12
                        jspit den Thread hier von früher kennst du noch? Auch die letzte Seite? Ev. ist da ja von Ulfikado noch ein Input dabei.

                        https://www.php.de/forum/webentwickl...38#post1471538

                        LG
                        The string "()()" is not palindrom but the String "())(" is.

                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Danke hausl , hatte ich nicht mehr auf dem Schirm.

                          Edit:
                          In den Beiträgen sind sehr interessante Hinweise enthalten. Und Ulfikado hat so etwas schon realisiert. Hab ein wenig gebraucht das zu finden:

                          Niirrty.Holiday

                          Sieht für meinen Geschmack sehr gut aus und dazu sind eine Menge Daten für 8 europäische Länder + Japan schon eingepflegt.

                          Per Google-suche hatte ich bisher nur Yasumi gefunden. Das war mir zu monströs.

                          Werde das erstmal in Ruhe sichten und dann entscheiden, ob mein Holiday-Projekt auf Datenbankbasis noch Sinn macht.

                          LG jspit

                          Kommentar

                          Lädt...
                          X