marcel2004: Probleme mit Kalenderwoche in PHP berechnen

0 49

Probleme mit Kalenderwoche in PHP berechnen

marcel2004
  • html
  • php
  1. 0
    Erebor
    1. 0
      marcel2004
      1. 0
        MudGuard
    2. 0
      MudGuard
      1. 0
        marcel2004
        1. 0
          Gunnar Bittersmann
          • php
          1. 0
            dedlfix
            1. 0
              Gunnar Bittersmann
              • rechtschreibung
    3. 0
      Gunnar Bittersmann
      • php
  2. 0
    Gunnar Bittersmann
    • zeit & datum
    1. 0
      dedlfix
      1. 0
        Gunnar Bittersmann
        1. 0
          dedlfix
          1. 0
            Der Martin
            1. 0
              dedlfix
              1. 0
                Gunnar Bittersmann
  3. 0
    Der Martin
    1. 0
      Gunnar Bittersmann
      • php
      1. 0
        Der Martin
        • php
        • zeit & datum
        1. 0
          Gunnar Bittersmann
          1. 0
            Der Martin
            1. 0
              Gunnar Bittersmann
  4. 0
    dedlfix
    1. 0
      marcel2004
      1. 0
        dedlfix
        1. 0
          marcel2004
          1. 0
            dedlfix
  5. 1
    encoder
    1. 0
      marcel2004
    2. 0
      Gunnar Bittersmann
      • javascript
      • php
      1. 0
        dedlfix
        1. 0
          marcel2004
          1. 0
            Raketenwilli
            1. 0
              marcel2004
              1. 0
                Raketenwilli
          2. 0
            dedlfix
            1. -2
              Raketendekomplizierer
              1. 0
                dedlfix
                1. 0
                  Raketendekomplizierer
              2. 0
                Der Martin
                • internationalisierung
                • php
                1. 0
                  Raketenwilli
                  1. 0
                    Der Martin
                    1. 0
                      Raketenwilli
                      1. 1
                        Gunnar Bittersmann
                        1. 0
                          Raketenwilli
                        2. 0

                          Off Topic: Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt ...

                          Raketenwilli
        2. 0
          Der Martin
        3. 1
          encoder

Hallo, ich hoffe ich bin hier richtig, es geht um folgendes:

Ich muss für Informatik bis Montag einen Kalender Rechner mit PHP und HTML schreiben. Das mit den HTML Formularen habe ich aber die Berechnung der Kalenderwoche macht mir voll Probleme da kommen immer komische Werte raus. Ich muss zugeben ich blicke auch nicht ganz wie sich eine Kalenderwoche berechnet ich dachte die fängt immer am 01.01 des Jahres an aber scheinbar doch nicht. Ich hab mir auch schon die älteren Beiträge dazu hier durchgelesen aber da war kein PHP dabei.

Schonmal Sorry für die Noob Frage.

  1. Mach dir keine Sorgen, Kalenderwochen sind zwar tricky zu berechnen, aber es gibt ein paar Tricks die es viel einfacher machen. Wenn du mit PHP und Datumswerten rechnen musst würde ich immer Carbon benutzen, das ist einen Datums Library die auch viele Funktionen für die Berechnung von Wochen integriert hat. Wirf hierzu einen Blick in die Doku: https://carbon.nesbot.com/docs/#api-week Nutze die isoWeek* Funktionen, die berechnen automatisch die korrekte Start Woche und die richtige Wochenzahl pro Monat, denn manchmal sind es 52 oder 53.

    Für die aktuelle Kalenderwoche kannst du sowas schreiben

    Carbon::today()->isoWeek()

    Überprüfe deine Berechnungen danach nocheinmal, am besten mit Sonderfällen wie z.b. dem Jahr 2026 dass 53 Kalenderwochen hat. Am einfachsten geht das mit einem der vielen online Kalender z.B. hier dem: https://kwheute.de/kalenderwochen/2026

    Wenn bei dir das gleiche rauskommt wie im Kalender bist du schon fertig. Probiere am besten einen längeren Zeitraum z.b. 10 Jahre durch, dann kannst du dir sicher sein dass deine Berechnung alle Fälle abdeckt.

    --
    Sei nicht faul, benutze https://google.de
    1. Cool danke das klingt gut aber wenn ich das bei mir versuche bekomme ich einen Fehler das dieses Carbon nicht gefunden werden kann. Ist mein PHP vielleicht kaputt?

      1. Hi,

        Cool danke das klingt gut aber wenn ich das bei mir versuche bekomme ich einen Fehler das dieses Carbon nicht gefunden werden kann. Ist mein PHP vielleicht kaputt?

        Nein. Erebors Vorschlag betrifft eine externe Library, die bei Dir nicht gefunden wird, weil Du sie nicht installiert hast.

        Die braucht es aber auch gar nicht.

        cu,
        Andreas a/k/a MudGuard

    2. Hi,

      Wenn du mit PHP und Datumswerten rechnen musst würde ich immer Carbon benutzen, das ist einen Datums Library die auch viele Funktionen

      Wozu für die Kalenderwoche eine extra Library einbinden?

      format('W') für das Datums-Objekt reicht doch.

      cu,
      Andreas a/k/a MudGuard

      1. Ich hab das jetzt so mit dem format probiert

        date()->format("W")
        

        aber bekomme den Fehler:

        date() expects at least 1 parameter, 0 given

        Ich hab das Gefühl ich hab das mit dem Datums Objekt nicht ganz verstanden.

        1. @@marcel2004

          Ich hab das jetzt so mit dem format probiert

          date()->format("W")
          

          aber bekomme den Fehler:

          date() expects at least 1 parameter, 0 given

          Ich hab das Gefühl ich hab das mit dem Datums Objekt nicht ganz verstanden.

          date() ist nicht das Datums-Objekt.

          Auch nicht ohne Deppenleerzeichen.

          😷 LLAP

          --
          „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
          Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

          — @HalleVerkehrt
          1. Tach!

            date() ist nicht das Datums-Objekt.

            Auch nicht ohne Deppenleerzeichen.

            Einen Bindestrich braucht das Datumsobjekt übrigens auch nicht.

            dedlfix.

            1. @@dedlfix

              das Datums-Objekt.

              Einen Bindestrich braucht das Datumsobjekt übrigens auch nicht.

              Ja, noch besser (zumindest bei kurzen zusammengesetzten Wörtern).

              😷 LLAP

              --
              „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
              Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

              — @HalleVerkehrt
    3. @@Erebor

      Wenn du mit PHP und Datumswerten rechnen musst würde ich immer Carbon benutzen

      Eine externe Bibliothek einzubinden ist wohl nicht im Sinne der Hausaufgabe.

      😷 LLAP

      --
      „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
      Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

      — @HalleVerkehrt
  2. @@marcel2004

    ich dachte die fängt immer am 01.01 des Jahres an aber scheinbar doch nicht. Ich hab mir auch schon die älteren Beiträge dazu hier durchgelesen aber da war kein PHP dabei.

    Aber es war doch bestimmt in den älteren Beiträgen dabei, wann die erste Kalenderwoche anfängt.

    Bei uns fängt eine Kalenderwoche immer montags an. (In den USA sonntags; aber die weichen ja bei so ziemlich allen Maßen und Formaten vom Rest der Welt ab.)

    Auch die erste. Wenn der 01.01. nun kein Montag ist, fängt die erste Kalenderwoche nicht am 01.01. an, sondern früher (d.h. im Vorjahr!) oder später.

    Das hättest du auch einfach herausfinden können: in der Wikipedia nach „Kalenderwoche“ gesucht führt zu https://de.wikipedia.org/wiki/Woche#Kalenderwoche

    😷 LLAP

    --
    „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
    Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

    — @HalleVerkehrt
    1. Tach!

      Auch die erste. Wenn der 01.01. nun kein Montag ist, fängt die erste Kalenderwoche nicht am 01.01. an, sondern früher (d.h. im Vorjahr!) oder später.

      Das wäre nicht richtig. Der 1.1. muss spätestens am Donnerstag sein, sonst haben wir noch die letzte Woche vom Vorjahr.

      dedlfix.

      1. @@dedlfix

        Auch die erste. Wenn der 01.01. nun kein Montag ist, fängt die erste Kalenderwoche nicht am 01.01. an, sondern früher (d.h. im Vorjahr!) oder später.

        Das wäre nicht richtig.

        ??

        Der 1.1. muss spätestens am Donnerstag sein, sonst haben wir noch die letzte Woche vom Vorjahr.

        Ja. Aber inwiefern widerspricht das meiner Aussage?

        Wenn der 01.01. ein Mittwoch ist, beginnt die erste Kalenderwoche am Montag, den 30.12. des Vorjahres.

        😷 LLAP

        --
        „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
        Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

        — @HalleVerkehrt
        1. Tach!

          Auch die erste. Wenn der 01.01. nun kein Montag ist, fängt die erste Kalenderwoche nicht am 01.01. an, sondern früher (d.h. im Vorjahr!) oder später.

          Das wäre nicht richtig.

          ??

          Okay, stimmt doch. War aber unvollständig, um genau ermitteln zu können, welche Woche vorliegt. Es kommt ja nicht auf den Montag an, sondern in welchem Monat der Donnerstag liegt.

          dedlfix.

          1. Hallo,

            Auch die erste. Wenn der 01.01. nun kein Montag ist, fängt die erste Kalenderwoche nicht am 01.01. an, sondern früher (d.h. im Vorjahr!) oder später.

            Das wäre nicht richtig.

            ??

            Okay, stimmt doch. War aber unvollständig, um genau ermitteln zu können, welche Woche vorliegt. Es kommt ja nicht auf den Montag an, sondern in welchem Monat der Donnerstag liegt.

            beide Ansätze sind möglich und führen zum gleichen Ergebnis. Deswegen sind ja für die erste Woche auch beide Definitionen richtig: a) Sie ist die erste Woche, deren Donnerstag im neuen Jahr liegt, oder b) sie ist die erste Woche, von der mindestens vier Tage im neuen Jahr liegen.

            Live long and pros healthy,
             Martin

            --
            Klein φ macht auch Mist.
            1. Tach!

              beide Ansätze sind möglich und führen zum gleichen Ergebnis.

              Richtig, aber der Bezug allein auf den Montag war nicht ausreichend.

              dedlfix.

              1. @@dedlfix

                Richtig, aber der Bezug allein auf den Montag war nicht ausreichend.

                Ich verstehe immer noch nicht, warum es das nicht gewesen sein sollte.

                Ich hätte auch schreiben können: Wenn der 01.01. nun kein Montag ist, sondern Dienstag, Mittwoch oder Donnerstag, dann fängt die erste Kalenderwoche nicht am 01.01. an, sondern früher (d.h. im Vorjahr!). Ist der 01.01. ein Freitag, Sonnabend oder Sonntag, dann fängt die erste Kalenderwoche später an.

                Die Ausführlichkeit fand ich hier nicht zwingend erforderlich. Was „Wenn der 01.01. nun kein Montag ist, fängt die erste Kalenderwoche nicht am 01.01. an, sondern früher (d.h. im Vorjahr!) oder später“ ja nicht falsch macht.

                Anstatt „oder“ hätte ich besser „bzw.“ schreiben sollen?

                😷 LLAP

                --
                „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
                Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

                — @HalleVerkehrt
  3. Hallo,

    ich dachte die fängt immer am 01.01 des Jahres an aber scheinbar doch nicht.

    nein, ganz so einfach ist es nicht (bei den Amerikanern anscheinend doch).

    Nach ISO 8601, die auch hier für DE gilt, ist die KW 1 die erste Woche, von der mindestens 4 Tage im neuen Jahr liegen. Die angebrochene Woche davor gilt als KW 53 des Vorjahrs (seltener auch KW 0 des laufenden Jahres).

    Suche also den ersten Montag im Jahr (weil die Woche mit Montag bekinnt). Fällt der auf den 5. Januar oder noch später, beginnt an dem Tag bereits die KW 2, sonst die KW 1.

    Live long and pros healthy,
     Martin

    --
    Klein φ macht auch Mist.
    1. @@Der Martin

      Die angebrochene Woche davor gilt als KW 53 des Vorjahrs (seltener auch KW 0 des laufenden Jahres).

      Nein. Meist ist es die 52.

      KW 0 gibt’s nicht.

      Suche also den ersten Montag im Jahr

      Warum das denn?

      😷 LLAP

      --
      „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
      Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

      — @HalleVerkehrt
      1. Hi,

        Die angebrochene Woche davor gilt als KW 53 des Vorjahrs (seltener auch KW 0 des laufenden Jahres).

        Nein. Meist ist es die 52.

        ja, stimmt. Meistens. Aber jedenfalls nicht die gesuchte erste Kalenderwoche des laufenden Jahres.

        Suche also den ersten Montag im Jahr

        Warum das denn?

        Weil eine Woche am Montag beginnt. Also ist der erste Montag doch ein guter Einstiegspunkt.
        Klar, man kann auch stur nach dem Wochentag des 01.01. schauen und danach entscheiden. Das finde ich aber weniger anschaulich.

        Live long and pros healthy,
         Martin

        --
        Klein φ macht auch Mist.
        1. @@Der Martin

          Suche also den ersten Montag im Jahr

          Warum das denn?

          Weil eine Woche am Montag beginnt. Also ist der erste Montag doch ein guter Einstiegspunkt.
          Klar, man kann auch stur nach dem Wochentag des 01.01. schauen und danach entscheiden. Das finde ich aber weniger anschaulich.

          Der Punkt ist, dass man hier weder das Eine noch das Andere braucht, weil PHP bereits eine entsprechende Methode zur Ermittlung der Kalenderwoche bereitstellt – wie MudGuard schon sagte.

          😷 LLAP

          --
          „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
          Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

          — @HalleVerkehrt
          1. Hallo,

            Suche also den ersten Montag im Jahr

            Warum das denn?

            Weil eine Woche am Montag beginnt. Also ist der erste Montag doch ein guter Einstiegspunkt.
            Klar, man kann auch stur nach dem Wochentag des 01.01. schauen und danach entscheiden. Das finde ich aber weniger anschaulich.

            Der Punkt ist, dass man hier weder das Eine noch das Andere braucht, weil PHP bereits eine entsprechende Methode zur Ermittlung der Kalenderwoche bereitstellt – wie MudGuard schon sagte.

            ja, schon. Aber ich hatte es so verstanden, dass die korrekte Berechnung der Kalenderwoche die eigentliche Aufgabe sei - quasi als Beleg, dass die Schüler a) mit PHP umgehen können und b) das Prinzip der Wochen- und Datumsrechnung verstanden haben.

            Live long and pros healthy,
             Martin

            --
            Klein φ macht auch Mist.
            1. @@Der Martin

              Aber ich hatte es so verstanden, dass die korrekte Berechnung der Kalenderwoche die eigentliche Aufgabe sei - quasi als Beleg, dass die Schüler a) mit PHP umgehen können

              Die hauseigene PHP-Methode zu verwenden ist doch gerade der Beleg, mit PHP umgehen zu können. 😏

              und b) das Prinzip der Wochen- und Datumsrechnung verstanden haben.

              Wenn das das Ziel ist, hätte man die Aufgabe nicht in PHP (o.a. Programmiersprache) stellen dürfen.

              😷 LLAP

              --
              „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
              Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

              — @HalleVerkehrt
  4. Tach!

    Ich muss zugeben ich blicke auch nicht ganz wie sich eine Kalenderwoche berechnet ich dachte die fängt immer am 01.01 des Jahres an aber scheinbar doch nicht.

    Es gibt unterschiedliche Systeme. Bei uns ist die erste Woche des Jahres diejenige, in der der Januar mindestens 4 Tage hat, oder anders gesagt, in der der Donnerstag im Januar liegt. Zudem beginnt bei und die Woche immer am Montag. Dieses Verhalten ist neben anderen Datums- und Zeitdingen in der ISO-8601 festgelegt.

    Anderenorts gelten andere Regeln. Im englischen Bereich fängt die Woche am Sonntag an und die erste Woche im Jahr ist die mit dem 1. Januar. Das weicht also in einigen Jahren von unserer Zählung ab.

    Wenn du PHP-Funktion zum Formatieren von Daten (inklusive dem Extrahieren von Einzelwerten, wie Wochentag) verwendest, musst du darauf achten, die richtigen Werte abzufragen. Bei N beginnt die Woche am Montag, bei w am Sonntag, wenn du beispielsweise date() nimmst. date() kann zwar den Wochenbeginn auf beide Arten liefern, die Wochennummer aber nur gemäß ISO-8601, was ja für dich ausreicht. strftime() könnte auch beides.

    dedlfix.

    1. Danke für den Tipp mit strftime ich habs jetzt so gelöst:

      $kalenderwoche = strftime('%W', strtotime("07/08/2021"))
      

      Wobei ich das Datum hinten mit dem aus den HTML Formular ersetze.

      1. Tach!

        Danke für den Tipp mit strftime ich habs jetzt so gelöst:

        $kalenderwoche = strftime('%W', strtotime("07/08/2021"))
        

        Das wäre gemäß der amerikanischen Regel und hierzulande falsch. bei strftime() müsstest du %V nehmen. Für unsere Bedingungen reicht aber bereits date() mit seinem ISO-8601-konformen W.

        dedlfix.

        1. Hä wie jetzt, ich muss das für die deutschen Regeln berechnen, nicht die amerikanischen, gebe ja auch ein deutsches Datum ein.

          1. Tach!

            Hä wie jetzt, ich muss das für die deutschen Regeln berechnen, nicht die amerikanischen, gebe ja auch ein deutsches Datum ein.

            Ja, dann musst du nach ISO-8601 verfahren, so wie ich bereits im ersten Beitrag schrieb. Ich hab die englischen Gegebenheiten nur als Beispiel angeführt, dass es noch andere Regeln gibt.

            dedlfix.

  5. (Edit: das meiste steht inzwischen schon von anderen da)

    Ich muss zugeben ich blicke auch nicht ganz wie sich eine Kalenderwoche berechnet ich dachte die fängt immer am 01.01 des Jahres an aber scheinbar doch nicht.

    Hätte doch jemand mal ein globales Netz erfunden in dem man ... ach lassen wir den Sarkasmus beiseite, hier https://de.wikipedia.org/wiki/Woche Kapitel 3 erklärt was dazu. Oder was anderes suchen.
    Es gibt mehrere Standards zur Kalenderwoche, erst mal müsstest du dir aussuchen welchen du nutzen willst. Je nach dem kommt ein anderes Ergebnis raus.

    Deine Beschreibung hört sich an als solltest du keine in php bereits existierende Formel nutzen, sondern das selbst ausprogrammieren. Eine externe Library einbinden dürfte dir keine Punkte bringen.
    Sollte man übrigens auch später nie unüberlegt tun. Was ich schon erlebt hab, für wirklich jeden 💩 wird da eine Ewigkeit nach einer Library gesucht, nur um sich 10 Zeilen Code zu sparen.

    1. Nicht ganz die Aufgabe war ein HTML Formular zu bauen in dem man ein Datum eingeben kann zu dem dann in PHP die Kalenderwoche berechnet und ausgegeben wird. Datum muss das deutsche sein nicht dieses komische englische mit den Strichen dazwischen. Aber habs jetzt dank euch hinbekommen 😀

    2. @@encoder

      Sollte man übrigens auch später nie unüberlegt tun. Was ich schon erlebt hab, für wirklich jeden 💩 wird da eine Ewigkeit nach einer Library gesucht, nur um sich 10 Zeilen Code zu sparen.

      Oder es wird gar nicht lang gesucht, sondern unüberlegt eine verwendet, „weil alle das so machen“. jQuery. 😡

      😷 LLAP

      --
      „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
      Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

      — @HalleVerkehrt
      1. Tach!

        Sollte man übrigens auch später nie unüberlegt tun. Was ich schon erlebt hab, für wirklich jeden 💩 wird da eine Ewigkeit nach einer Library gesucht, nur um sich 10 Zeilen Code zu sparen.

        Oder es wird gar nicht lang gesucht, sondern unüberlegt eine verwendet, „weil alle das so machen“. jQuery. 😡

        Wir haben es hier mit Datumsberechnung zu tun. Da bringt es nichts, allgemeine Beobachtungen zur Verwendung von Bibliotheken haranzuziehen. Datums- und Zeitberechnungen sind aufgrund der Vielfalt von kulturellen, gesetzlichen, geschichtlichen und örtlichen Bedingungen so komplex, dass man tunlichst die Finger von selbst geschriebenem "10-Zeilen-Code" lassen sollte, weil all diese Regeln nicht in 10 (lesbaren) Zeilen unterzubringen gehen. Selbst wenn man nur UTC-Zeiten nimmt, fängt es bereits an, wenn man monatsübergreifende Werte benötigt. Da hat man die unterschiedlichen Längen und die Schaltjahresregeln zu berücksichtigen. Wenn es noch komplexer wird, können einem drei Wochen Programmieren auch gern mal zwei Zeilen Einbindung und Verwendung einer Bibliothek ersparen.

        dedlfix.

        1. Heißt das jetzt es ist nicht gut wenn ich strftime statt dieses carbon benutze?

          1. Heißt das jetzt es ist nicht gut wenn ich strftime statt dieses carbon benutze?

            NEIN! Du wirst wohl strftime() benutzen sollen oder wollen statt für die Aufgabe eine Bibliothek zu installieren, die allenfalls für Zeitreisende interessant ist.

            Anmerkungen:

            • Denke daran, mit setlocale() das korrekte Gebietsschema einzustellen.
            • Wie Du an der Diskussion siehst ist es immer wichtig, die Aufgabe nicht nur bruchstückhaft wieder zu geben.
            • In Handbuch steht alles, was Du brauchst.
            1. Ok danke dir

              1. Übrigens wohl eher

                strftime('%V', $t );
                

                Welche Art der Wochentagsberechnung vorgegeben wurde steht in der Aufgabe. Wenn nichts dazu drin steht ist wohl das ISO-Wochendatum gemeint und nicht irgendeine andere Variante.

                Wenn nichts dazu drin steht und man regt sich auf, das sei „inkorrekt weil nicht eindeutig“, bekommt man vom Lehrer vormittags (da hat er Recht) einen Hinweis auf die lokale Authismusberatung und nachmittags (da hat er frei) keine Reaktion... 🤣

          2. Tach!

            Heißt das jetzt es ist nicht gut wenn ich strftime statt dieses carbon benutze?

            Für diese einfache Aufgabe reichen die in PHP eingebauten Routinen bereits aus. Erst wenn der Funktionsumfang der in PHP eingebauten Bibliotheksfunktionen nicht mehr weiterhilft, muss man sich nach Alternativen umschauen. Ich meinte in meinem vorherigen Posting nicht, dass man nur externe Bibliotheken suchen soll. Die eingebauten zählen auch dazu. Wenn man ein Problem hat, das anderswo bereits gelöst ist, warum sollte man sich die Mühe nochmal selbst machen? Das ist eine Frage der Wirtschaftlichkeit. Im Falle der Zeitberechnung übersehen Einsteiger gern mal die Komplexität hinter dem System.

            PHP bringt von Haus aus bereits eine Menge Berechnungsmöglichkeiten mit und nutzt dabei die im Betriebssystem bereits vorhandenen Datums- und Zeitroutinen. Das ist für viele Fälle ausreichend und in der Regel besser, als selbst etwas zu erfinden.

            Wenn man zum Beispiel die Aufgabe hat, auf ein Datum eine Anzahl Tage zu addieren, könnte man auf die Idee kommen, einfach

            Anzahl Tage x 24h x 60m x 60s

            auszurechnen und zuzuschlagen. Das klappt auch augenscheinlich, bis man die beiden Tage der Zeitumstellung im Bereich hat. Daran zeigt sich, dass das schnelle Selbstberechnen auf diese Weise nicht reicht. Man könnte nun die Formel so erweitern, dass diese beiden Tage berücksichtigt werden. Man kann es aber auch lassen und die in PHP eingebauten Möglichkeiten nutzen.

            dedlfix.

            1. Man kann es aber auch lassen und die in PHP eingebauten Möglichkeiten nutzen.

              Ja.

              <?php
              $days = 4;
              $t1   = mktime( 0, 0, 0, 2, 27,    2000 );
              $t2   = mktime( 0, 0, 0, 2, 27+7,  2000 );
              
              setlocale( LC_TIME, 'de_DE.UTF-8' );
              echo strftime('%x', $t1 ) . PHP_EOL;
              echo strftime('%x', $t2 ) . PHP_EOL;
              
              $diff = $t2 - $t1;
              echo 'Differenz: '. $diff . ' Sekunden (' . floor( $diff/86400 ) . ' Tage).' . PHP_EOL;
              
              
              1. Tach!

                Ja.

                [Code]

                So hat man das früher gemacht. PHP hat seit langem die DateTime-Klasse plus Nebenklassen. Dort kann man Zeitzonen direkt angeben, ohne den gesamten Prozess mit setlocale() umzuwuchten, inklusive möglicher Nebenwirkungen für andere Threads in einigen Systemen.

                dedlfix.

                1. Die Date-Time-Klasse hat aber keine Möglichkeit einer Ausgabeformatierung in Abhängigkeit von locales.

                  Da bedeutet: Man müsste diese selbst für DateTime::format(string $format): bauen oder jemanden trauen, der es versucht hat...

              2. Hallo,

                setlocale( LC_TIME, 'de_DE.UTF-8' );
                

                du kannst nicht blindlings voraussetzen, dass ein solches locale auf dem Server verfügbar und konfiguriert ist. Wenn der Hoster in Deutschland ansässig ist, wahrscheinlich ja; wenn er vor allem deutsche Kundschaft anspricht, dann vermutlich auch.

                Aber Globalisierung bedeutet auch: Ich kann einen Webhosting-Vertrag mit einem finnischen Anbieter haben, der seine Server aus Kostengründen in Kroatien stehen hat, von Haus aus alles auf skandinavische Maßstäbe bezieht, und nur kulanterweise auch einige Balkan-Varianten anbietet.

                Live long and pros healthy,
                 Martin

                --
                Klein φ macht auch Mist.
                1. du kannst nicht blindlings voraussetzen, dass ein solches locale auf dem Server verfügbar und konfiguriert ist.

                  Ich kann $support anrufen und dem sagen, dass einfach nur das Paket 'locales-all' installiert werden muss, was übrigens auch dieses leidige „Kompilieren“ der einzelnen locales (nervt bei Updates...)) erspart. Da ich regelmäßig auch herausfinden kann, welche Sorte Linux oder bsd auf dem Server läuft, kann meinereiner sogar den genauen Befehl zur Installation nennen.

                  Wenn $hoster das nicht tun will will er $money nicht.

                  1. Hi.

                    du kannst nicht blindlings voraussetzen, dass ein solches locale auf dem Server verfügbar und konfiguriert ist.

                    Ich kann $support anrufen und dem sagen, dass einfach nur das Paket 'locales-all' installiert werden muss, [...]
                    Wenn $hoster das nicht tun will will er $money nicht.

                    genau, und das dürfte für den größten Teil der Billig- oder Gratis-Hoster zutreffen.

                    Live long and pros healthy,
                     Martin

                    --
                    Klein φ macht auch Mist.
                    1. Ich kann $support anrufen und dem sagen, dass einfach nur das Paket 'locales-all' installiert werden muss, [...]
                      Wenn $hoster das nicht tun will will er $money nicht.

                      genau, und das dürfte für den größten Teil der Billig- oder Gratis-Hoster zutreffen.

                      Es gibt dafür allenfalls vage Anhaltspunkte. Ich vermag es so pauschal nicht zu glauben.

                      Feststellen könnte man es als einfacher Benutzer in einer Shell mit

                      sh: locale -a | wc -l
                      

                      Kommt da eine hohe Zahl heraus (bei mir ist sind es 498 auf einem Host mit Raspbian GNU/Linux 10 buster @home bzw. 875 auf Ubuntu 18.04.5 LTS, letzterer unterstützt die gleichen Sprachen aber weitere Kodierungen) kann man davon ausgehen, dass der „Billig- oder Gratis-Hoster“ in diesem Punkt kein „ganz dummer“ ist und sinnigerweise das Paket „locales-all“ installiert hat.

                      1. @@Raketenwilli

                        in einer Shell

                        und

                        der „Billig- oder Gratis-Hoster“

                        ist aber auch ein Widerspruch, oder?

                        😷 LLAP

                        --
                        „Man darf die Klimakrise doch echt jetzt nicht überbewerten.
                        Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

                        — @HalleVerkehrt
                        1. @@Raketenwilli

                          in einer Shell

                          und

                          der „Billig- oder Gratis-Hoster“

                          ist aber auch ein Widerspruch, oder?

                          😷 LLAP

                          Weniger Widerspruch als man denken mag:

                          • Denn schon das „Abziehbild des Billighostings“ aus der obersten Luftschicht bietet ssh ab Starterpaket (4 €/Monat) ...
                          • Und selbst wenn nicht bleiben immer so schicke Sachen wie php::exec() und Konsorten.
                        2. Hab vergessen Dich für das Zitat in der Signatur zu loben:

                          „Man darf die Klimakrise doch echt jetzt nicht überbewerten. ... Es ist gar nicht klar, ob 2022 wieder Extremregen und Hochwasser bringt oder ob es ein ganz gewöhnliches Dürrejahr wird.“

                          Ich weiß wirklich nicht, ob ich lachen oder heulen soll. Aber die Tendenz geht zu einem richtig bösen, verzweifelten, bitterem Lachen über die Dummheit. Und ja. Leider wohl auch die in meinen eigenen Klimasünden.

        2. Hallo,

          Wir haben es hier mit Datumsberechnung zu tun. Da bringt es nichts, allgemeine Beobachtungen zur Verwendung von Bibliotheken haranzuziehen. Datums- und Zeitberechnungen sind aufgrund der Vielfalt von kulturellen, gesetzlichen, geschichtlichen und örtlichen Bedingungen so komplex, dass man tunlichst die Finger von selbst geschriebenem "10-Zeilen-Code" lassen sollte, weil all diese Regeln nicht in 10 (lesbaren) Zeilen unterzubringen gehen.

          ja, die allgemein übliche Zeitrechnung ist schon unglaublich komplex und teilweise umständlich.

          Selbst wenn man nur UTC-Zeiten nimmt, fängt es bereits an, wenn man monatsübergreifende Werte benötigt. Da hat man die unterschiedlichen Längen und die Schaltjahresregeln zu berücksichtigen.

          Also am besten nur den Unix-Timestamp benutzen. Oder das Julianische Datum. 😉

          Wenn es noch komplexer wird, können einem drei Wochen Programmieren auch gern mal zwei Zeilen Einbindung und Verwendung einer Bibliothek ersparen.

          So ungefähr.

          Live long and pros healthy,
           Martin

          --
          Klein φ macht auch Mist.
        3. Wenn es noch komplexer wird, können einem drei Wochen Programmieren auch gern mal zwei Zeilen Einbindung und Verwendung einer Bibliothek ersparen.

          Es geht aber auch anders rum.
          Da wird für die Umrechnung von Werten nicht nur die Formel gesucht und umgesetzt, sondern extra eine Library langwierig gesucht (verglichen mit eine Zeile Formel suchen und umsetzen) und ins Projekt eingebunden mit allem Aufwand den das nach sich zieht.
          Anstatt sich wenigstens aus der Library nur die Formel abzuschauen. Da weiß man nicht mehr was man sagen soll.

          Das "unüberlegt" in meinem Beitrag ist wichtig, das hätte ich hervorheben sollen.