Bernd: Wochentag ermitteln

0 52

Wochentag ermitteln

Bernd
  • php
  1. 0
    dedlfix
    1. 0

      Grob falsch!

      Freitag
      1. 0
        dedlfix
        1. 0
          Freitag
          1. 0
            dedlfix
            1. 0
              Freitag
              1. 0
                dedlfix
                1. 0
                  Freitag
                  1. 0
                    dedlfix
                    1. 0
                      Freitag
                      1. 0
                        dedlfix
                        1. 0
                          JürgenB
      2. -3
        pl
        1. 0
          Christian Kruse
          1. 0
            Matthias Apsel
          2. -1
            pl
            1. 0
              Matthias Apsel
              1. 0
                pl
                1. 0
                  Matthias Apsel
            2. 0
              Gunnar Bittersmann
            3. 0
              dedlfix
              1. -1
                pl
                1. 3
                  dedlfix
                  1. 0
                    dedlfix
                    1. 0
                      Matthias Apsel
                      1. 0
                        Gunnar Bittersmann
                        1. 0
                          Christian Kruse
                2. 1
                  Gunnar Bittersmann
                3. 1
                  Matthias Apsel
        2. 0
          Gunnar Bittersmann
  2. 0
    Christian Kruse
    1. 0
      dedlfix
      1. 0
        Christian Kruse
    2. 0
      Gunnar Bittersmann
      1. 0
        Christian Kruse
  3. -2
    pl
    1. 0
      dedlfix
    2. -1
      Bernd
      • gesellschaft
      1. 1
        Christian Kruse
        1. 0
          Bernd
          1. 0
            Tabellenkalk
      2. 0
        Matthias Apsel
        1. 0
          Bernd
          1. 0
            Matthias Apsel
            1. 0
              Bernd
              1. 0
                dedlfix
          2. 0
            Tabellenkalk
            1. 0
              Bernd
              1. 0
                dedlfix
                1. 0
                  Bernd
      3. 0
        dedlfix

Hallo,

ich ermittle wie folgt einen Wochentag

$datum=strtotime("2019-05-18");
$tage = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); 
$tag = $tage[date("w",$datum)];  
echo $tag;

gibt es noch eine einfachere Möglichkeit?

akzeptierte Antworten

  1. Tach!

    ich ermittle wie folgt einen Wochentag

    Ein bisschen genauer darf man das als Programmierer schon formulieren. Der Name des Wochentags auf Deutsch zu einem Datum darf es also sein.

    $datum=strtotime("2019-05-18");
    $tage = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); 
    $tag = $tage[date("w",$datum)];  
    echo $tag;
    

    gibt es noch eine einfachere Möglichkeit?

    Welcher Teil soll einfacher werden bei diesem Dreizeiler? Willst du den Code in eine Funktion auslagern, so das du beim Verwenden nur noch einen Funktionsaufruf zu notieren hast? Oder ist das die einzige Stelle der Anwendung, so dass sich eine Funktion nicht lohnt? Reicht es dann lediglich die Syntax ein wenig zu kürzen? Zum Beispiel eckige Klammern statt array(...)

    $tage = ["Sonntag",];
    

    Oder möchtest du die Wochentagsnamen nicht selbst angeben müssen? PHP kennt sie nicht auf deutsch. Es wäre noch umständlicher als das Array zu notieren, sie aus anderen Datensammlungen zu extrahieren.

    dedlfix.

    1. Oder möchtest du die Wochentagsnamen nicht selbst angeben müssen? PHP kennt sie nicht auf deutsch.

      Das ist grob falsch. PHP kennt die Wochentage (ebenso Monatsnamen) zwar nicht "selbst", kann aber - vorausgesetzt man wirft mal einen Blick ins Handbuch - die Funktionen bzw. Libarys des OS "wrappen"(*):

      <?php setlocale( LC_ALL, 'de_DE' ); echo strftime( '%A' );
      
      Freitag
      

      Das macht PHP auch bei hunderten anderer Funktionen.

      Für internationalisierte Seiten sollte auf dem (Linux, Distribution ist egal) Server das Paket "locales-all" installiert sein, sonst halt die benötigten Sprachpakete.

      Das Paket "locales-all" zu installieren spart übrigens Zeit bei Installationen und Updates, weil sonst die "locales" bei jedem Update neu generiert werden - was bei der Alternative, der Installation vieler einzelner Sprachpakete, eine Weile dauern kann.


      *) Wie das bei PHP unter Windows funktioniert weiß ich mangels Interesses nicht.

      1. Tach!

        Oder möchtest du die Wochentagsnamen nicht selbst angeben müssen? PHP kennt sie nicht auf deutsch.

        Das ist grob falsch. PHP kennt die Wochentage (ebenso Monatsnamen) zwar nicht "selbst",

        Also ist diese Aussage doch nicht falsch.

        kann aber - vorausgesetzt man wirft mal einen Blick ins Handbuch - die Funktionen bzw. Libarys des OS "wrappen":

        Das steht sogar bei date(): "To format dates in other languages, you should use the setlocale() and strftime() functions instead of date()." Das hätte Bernd also auch selbst herausfinden können, ist also ein Vorwurf in seine Richtung.

        <?php setlocale(LC_ALL,'de_DE'); echo strftime('%A');
        

        Dass es setlocale() gibt, ist mir bekannt. Aber auch, dass es damit Nebenwirkungen geben kann, wenn man sein System nicht passend dazu betreibt. setlocale() setzt sich außerdem nicht nur für die folgende Funktion und dann wieder zurück. Wenn man das so setzt und nicht wieder zurücksetzt, hat man die Auswirkungen für den gesamten Rest des Programms zu beachten, nebst möglicher anderer Anwendungen im selben Prozess. Besonders wenn man schon recht fortgeschritten in der Programmierung ist und nicht auf TDD setzt und nun mit setlocale() anfängt, bedeutet das Aufwand, alles andere nochmal auf problemloses Funktionieren zu testen. Ich halte es deshalb für einfacher, den Dreizeiler zu nehmen. Die Wochentagsnamen werden sich auch in absehbarer Zeit nicht ändern, so dass da auch kein Wartungsbedarf entsteht, den man mit Updaten der Systembibliothek nicht hätte.

        Das macht PHP auch bei hunderten anderer Funktionen.

        Wo genau macht PHP das? Anzubieten, dass man setlocale() selbst nutzen kann, ist noch nicht, dass "PHP das macht".

        dedlfix.

        1. PHP kennt die Wochentage (ebenso Monatsnamen) zwar nicht "selbst", kann aber - vorausgesetzt man wirft mal einen Blick ins Handbuch - die Funktionen bzw. Libarys des OS "wrappen"(*): […] Das macht PHP auch bei hunderten anderer Funktionen.

          Wo genau macht PHP das?

          Ganz einfach schon bei strftime selbst. ctime ist eine solche lib und wird von PHP eingebunden und, ebenso wie andere Funktionen aus der libc, benutzt.

          Deswegen auch das Verhalten bezüglich der Prozesse/Threads. Hat man den Webserver "multithreaded" und PHP als Modul bzw. fcgi oder als ähnlichen Prozess am laufen kann es zwar Probleme geben, es wird aber genügen setlocale vor der ersten Ausgabe zu verwenden.

          Anzubieten, dass man setlocale() selbst nutzen kann, ist noch nicht, dass "PHP das macht".

          Hinzuschreiben, dass PHP "Guten Morgen" ausgeben soll, ist auch noch nicht, dass "PHP das macht". PHP macht, wie jedes andere Programm, was man ihm zu machen aufgibt. Und wenn man setlocale nicht selbst (oder falsch, z.B. durch eine auf dem System nicht unterstützte Angabe) anwendet um die locale-Umgebung zu setzen, dann nimmt PHP ebenso wie strftime aus der c-lib eben "en_US" als Voreinstellung.

          1. Tach!

            PHP kennt die Wochentage (ebenso Monatsnamen) zwar nicht "selbst", kann aber - vorausgesetzt man wirft mal einen Blick ins Handbuch - die Funktionen bzw. Libarys des OS "wrappen"(*): […] Das macht PHP auch bei hunderten anderer Funktionen.

            Wo genau macht PHP das? Anzubieten, dass man setlocale() selbst nutzen kann, ist noch nicht, dass "PHP das macht".

            Ganz einfach schon bei strftime selbst. ctime ist eine solche lib und wird von PHP eingebunden und, ebenso wie andere Funtionen aus der libc, benutzt.

            Warum hat strftime dann keinen Parameter, um die Sprache auszugeben? Du meinst also nicht, dass PHP setlocale() setzt, so wie du es in deinem Code gezeigt hast, sondern dass es die Angaben aus der locale-Bibliothek entnimmt, wenn man als Anwender es zuvor gesetzt hat. Bleibt noch die Aussage, dass hunderte Funktionen das so machen würden.

            Deswegen auch das Verhalten bezüglich der Prozesse/Threads. Hat man den Webserver "multithreaded" und PHP als Modul bzw. fcgi oder als ähnlichen Prozess am laufen kann es zwar Probleme geben, es wird aber genügen setlocale vor der ersten Ausgabe zu verwenden.

            Sicher? setlocale() löst nicht magisch alle Probleme. Wenn man bisher überhaupt nicht daran gedacht hat, setlocale() zu verwenden, dann müssten doch nun "bei hunderten anderer Funktionen" andere Ergebnisse enstehen, als man zuvor hatte. Das soll keine Probleme erzeugen?

            dedlfix.

            1. Sicher? setlocale() löst nicht magisch alle Probleme. Wenn man bisher überhaupt nicht daran gedacht hat, setlocale() zu verwenden, dann müssten doch nun "bei hunderten anderer Funktionen" andere Ergebnisse enstehen, als man zuvor hatte.

              Ja! Hier ist noch so eine:

              https://www.php.net/manual/de/function.money-format.php

              1. Tach!

                Sicher? setlocale() löst nicht magisch alle Probleme. Wenn man bisher überhaupt nicht daran gedacht hat, setlocale() zu verwenden, dann müssten doch nun "bei hunderten anderer Funktionen" andere Ergebnisse enstehen, als man zuvor hatte.

                Ja! Hier ist noch so eine:

                https://www.php.net/manual/de/function.money-format.php

                Aus Bernd bisherigen Postings ging hervor, dass er nicht immer mit Daten im Rohformat arbeitet, sondern auch mal mit Strings hantiert und diese passend zurechtschneidet. Das ist noch ein weiterer Punkt, bei dem ich nicht ausschließen kann, dass die Verwendung von setlocale() nicht auch da potentiell andere Strings erzeugt, und die Verarbeitung nicht darauf eingestellt ist. Ich halte es auch deswegen für grob falsch, setlocale() zu empfehlen, ohne auf die möglichen Auswirkungen hinzuweisen.

                dedlfix.

                1. Aus Bernd bisherigen Postings ging hervor, dass er nicht immer mit Daten im Rohformat arbeitet, sondern auch mal mit Strings hantiert und diese passend zurechtschneidet. Das ist noch ein weiterer Punkt, bei dem ich nicht ausschließen kann, dass die Verwendung von setlocale() nicht auch da potentiell andere Strings erzeugt, und die Verarbeitung nicht darauf eingestellt ist. Ich halte es auch deswegen für grob falsch, setlocale() zu empfehlen, ohne auf die möglichen Auswirkungen hinzuweisen.

                  Das ist eben so wie bei dem Meer-Strand-Prinzip: Plastik rein → Plastik raus!

                  Aber wir reden hier über Deine Aussage:

                  Oder möchtest du die Wochentagsnamen nicht selbst angeben müssen? PHP kennt sie nicht auf deutsch.

                  Auf richtig eingerichteten Webservern ist die halt objektiv falsch. Auf schlecht eingerichteten Webservern kann sie zutreffen. Etwas wie

                  <?php system("locale -a");
                  

                  oder halt das simple

                  locale -a
                  

                  in einem (Linux-) Terminal kann Auskunft geben.

                  1. Tach!

                    Das ist eben so wie bei dem Meer-Strand-Prinzip: Plastik rein → Plastik raus!

                    Das macht die Empfehlung, ein Wochenende am Strand zu verbringen, nicht besser.

                    Aber wir reden hier über Deine Aussage:

                    Oder möchtest du die Wochentagsnamen nicht selbst angeben müssen? PHP kennt sie nicht auf deutsch.

                    Auf richtig eingerichteten Webservern ist die halt objektiv falsch.

                    Find ich nach wie vor nicht. Nicht PHP ist es, das die Namen kennt. Das wirst du dann feststellen, wenn du keine oder unpassende locale-Pakete installiert hast. PHP stellt nur eine Möglichkeit bereit, darauf zuzugreifen.

                    Auf schlecht eingerichteten Webservern kann sie zutreffen.

                    Und da man das nicht ausschließen kann, ist das als alleinige Nennung nicht ausreichend.

                    dedlfix.

                    1. Aber wir reden hier über Deine Aussage:

                      Oder möchtest du die Wochentagsnamen nicht selbst angeben müssen? PHP kennt sie nicht auf deutsch.

                      Auf richtig eingerichteten Webservern ist die halt objektiv falsch.

                      Find ich nach wie vor nicht. Nicht PHP ist es, das die Namen kennt. Das wirst du dann feststellen, wenn du keine oder unpassende locale-Pakete installiert hast. PHP stellt nur eine Möglichkeit bereit, darauf zuzugreifen.

                      PHP stellt auch nur Möglichkeiten bereit auf das Dateisystem zuzugreifen. Und, oh Wunder, auch die entstammen der libc. Nach Deiner Theorie kann also PHP auch keine Dateien oder gar Netzwerkressourcen öffnen, nicht mal die Umgebung lesen, keine einzige Stringfunktion, nicht rechnen, nicht … - auf gut deutsch: nichts.

                      1. Tach!

                        PHP stellt auch nur Möglichkeiten bereit auf das Dateisystem zuzugreifen. Und, oh Wunder, auch die entstammen der libc. Nach Deiner Theorie kann also PHP auch keine Dateien oder gar Netzwerkressourcen öffnen, nicht mal die Umgebung lesen, keine einzige Stringfunktion, nicht rechnen, nicht … - auf gut deutsch: nichts.

                        Das siehst du nicht richtig. Und du übertreibst, entfernst dich von der sachlichen Ebene. Im Gegensatz zu den Wochentagsnamen braucht es solche Funktionalität schon zum eigenen Arbeiten. Ich habe meine Meinung dargestellt, mehr habe ich nicht hinzuzufügen. Diskussionen auf der Ebene sind nur noch Schlagabtausch.

                        dedlfix.

                        1. Hallo dedlfix,

                          lass es gut sein. Selbst wenn du Freitag voll zustimmen würdest, würde er das für grob falsch halten, womit er dann sogar recht hätte. 😀

                          Gruß
                          Jürgen

      2. Hi

        <?php setlocale( LC_ALL, 'de_DE' ); echo strftime( '%A' );
        

        setlocale() ist überflüssig. Denn 1. wird die Zeitzone sowieso gesetzt und 2. liefert strtotime() daraufhin einen Zeitstempel welcher exakt der geetzten Zeitzone entspricht.

        MFG

        1. Hallo pl,

          <?php setlocale( LC_ALL, 'de_DE' ); echo strftime( '%A' );
          

          setlocale() ist überflüssig. Denn 1. wird die Zeitzone sowieso gesetzt und 2. liefert strtotime() daraufhin einen Zeitstempel welcher exakt der geetzten Zeitzone entspricht.

          Das setlocale() hat mit der Zeitzone genau gar nichts zu tun. Es liefert ausschließlich die (in diesem Falle deutschen) Übersetzungen für Wochentags- und Monatsnamen. Siehe auch das direkt darauf folgende echo strftime('%A').

          LG,
          CK

          1. Hallo Christian Kruse,

            <?php setlocale( LC_ALL, 'de_DE' ); echo strftime( '%A' );
            

            Das setlocale() […] liefert ausschließlich

            Das ist falsch 😝. setlocale legt eine ganze Menge regionaler Einstellungen fest.

            • LC_ALL für alle folgenden Werte
              • LC_COLLATE für String-Vergleiche, siehe strcoll()
              • LC_CTYPE für Klassifizierung und Umwandlung von Zeichen, zum Beispiel strtoupper()
              • LC_MONETARY für localeconv()
              • LC_NUMERIC für das Dezimal-Trennzeichen (Siehe auch localeconv())
              • LC_TIME für Zeit- und Datums-Formatierungen mittels strftime()
              • LC_MESSAGES für Systemmeldungen (verfügbar, wenn PHP mit liblintl kompiliert wurde)

            Bis demnächst
            Matthias

            --
            Pantoffeltierchen haben keine Hobbys.
            ¯\_(ツ)_/¯
          2. hi

            Das setlocale() hat mit der Zeitzone genau gar nichts zu tun. Es liefert ausschließlich die (in diesem Falle deutschen) Übersetzungen für Wochentags- und Monatsnamen.

            Aha. Demnach haben Wochentags und Monatsnamen wohl auch gar nichts mit der Zeitzone zu tun!? Die Antwort lautet: Ja und Nein! Denn ein Wochentag bzw. Monatsname wird ja durch das gegebene Datum festgelegt (das wäre das Nein). Aber: PHP/POSIX rechnen über einen lokalen Zeitstempel! Insofern also besteht diese Abhängigkeit. Siehe strftime(), das wäre das Ja. MFG

            Im Übrigen verlangt setlocale() daß die Zeitzone gesetzt wurde! Wenn das nicht der Fall ist, erscheint eine Fehlermeldung!

            1. Hallo pl,

              Aha. Demnach haben Wochentags und Monatsnamen wohl auch gar nichts mit der Zeitzone zu tun!?

              Die gewünschten Namen haben gar nichts mit der Zeitzone zu tun.

              Bis demnächst
              Matthias

              --
              Pantoffeltierchen haben keine Hobbys.
              ¯\_(ツ)_/¯
              1. hi

                Aha. Demnach haben Wochentags und Monatsnamen wohl auch gar nichts mit der Zeitzone zu tun!?

                Die gewünschten Namen haben gar nichts mit der Zeitzone zu tun.

                Doch, haben sie. Aber nochmal erkläre ich das nicht. MFG

                1. Hallo pl,

                  Doch, haben sie. Aber nochmal erkläre ich das nicht.

                  Ob es nun Sonntag oder dimanche heißt, hängt wie von der Zeitzone ab?

                  Bis demnächst
                  Matthias

                  --
                  Pantoffeltierchen haben keine Hobbys.
                  ¯\_(ツ)_/¯
            2. @@pl

              Demnach haben Wochentags und Monatsnamen wohl auch gar nichts mit der Zeitzone zu tun!? Die Antwort lautet: Ja und Nein!

              Ja nachdem, ob man unter Wochentags- (mit Bindestrich!) und Monatsnamen Funktionen Wochentagsname(Zeitpunkt) und Monatsname(Zeitpunkt) oder Wochentagsname(Wochentagsnummer) und Monatsname(Monatsnummer) versteht.

              Ich tendiere zu letzterem.

              LLAP 🖖

              --
              „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
            3. Tach!

              Im Übrigen verlangt setlocale() daß die Zeitzone gesetzt wurde! Wenn das nicht der Fall ist, erscheint eine Fehlermeldung!

              Kann ich nicht nachvollziehen. Wenn PHP keine konfigurierte Zeitzone findet, nimmt es UTC.

              Die Namen der Wochentage sind nicht von der Zeitzone abhängig, wohl aber die Ermittlung, welcher Wochentag ist. Gibt man jedoch ein Datum vor, wie in diesem Fall, spielt die Zeitzone keine Rolle mehr, weil ein konkretes Datum in jeder Zeitzone immer den selben Wochentag hat.

              dedlfix.

              1. Ok, extra für Dich: Der 1.1.1970 war weltweit ein Donnerstag, das ist Fakt. Aber PHP sieht das anders, denn PHP rechnet über die Zeitzone! Das lässt sich leicht nachprüfen, setzen wir mal eine Zeitzone die sich an der Datumsgrenze befindet:

                date_default_timezone_set("Pacific/Tahiti");
                $wds = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Sonnabend','Sonntag');
                echo $wds[(4 + strtotime("1970-1-1")/86400) % 7];
                

                Und so erhalten wir eben nicht den Donnerstag, sondern den Freitag! Darüber sollte sich jeder, der mit PHPs Datumsfunktionen rechnet, im Klaren sein: Daß PHP stets über eine lokale Zeitzone rechnet!

                Sagst Du ja selbst:

                Wenn PHP keine konfigurierte Zeitzone findet, nimmt es UTC.

                Genau! Und mit der richtigen Zeitzone klappt es auch mit dem Donnerstag für den 1.1.1970. Im Übrigen war auch auf Tahiti der 1.1.1970 ein Donnerstag. MFG

                1. Tach!

                  Ok, extra für Dich: Der 1.1.1970 war weltweit ein Donnerstag, das ist Fakt. Aber PHP sieht das anders, denn PHP rechnet über die Zeitzone! Das lässt sich leicht nachprüfen, setzen wir mal eine Zeitzone die sich an der Datumsgrenze befindet:

                  date_default_timezone_set("Pacific/Tahiti");
                  $wds = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Sonnabend','Sonntag');
                  echo $wds[(4 + strtotime("1970-1-1")/86400) % 7];
                  

                  Und so erhalten wir eben nicht den Donnerstag, sondern den Freitag!

                  Deine Rechnung ergibt diesen Wert, aber du rechnest falsch. Du darfst für den Donnerstag nur eine 3 hinzufügen, weil der in dem 0-basierenden Array ebendiesen Index-Wert hat.

                  dedlfix.

                  1. Tach!

                    date_default_timezone_set("Pacific/Tahiti");
                    $wds = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Sonnabend','Sonntag');
                    echo $wds[(4 + strtotime("1970-1-1")/86400) % 7];
                    

                    Der zweite Punkt, warum deine Rechnung falsch ist, ist, dass strtotime() eine Zeitangabe in UTC liefert. Als es in Tahiti 0 Uhr war, war es bereits 10 Uhr UTC. Du rechnest also hier mit 36000 Sekunden. Sowas geht nur solange gut, wie du innerhalb des UTC-Tages bleibst (und nicht den falschen Wochentagsoffset nimmst). Wenn eine Zeitzone östlich von UTC in Ortszeit 0 Uhr hat, ist es in UTC immer noch der Vortag und das Ergebnis ist Mittwoch, weil das für UTC einfach richtig ist.

                    Wenn du also mit 86400 Sekunden pro Tag rechnen möchtest, musst du einen Basiswert von 0 annehmen und nicht einen mit Differenz zu UTC. Außerdem musst du berücksichtigen, dass es keine Zeitverschiebungen wegen Sommerzeit oder anderer politischer Entscheidungen gibt. Insofern ist es abzuraten, selbst solche Sekunden-pro-Tag-basierenden Rechnungen vorzunehmen und stattdessen

                    dedlfix.

                    1. Hallo dedlfix,

                      @Christian Kruse hatte mal ein passendes Video (sogar mit deutschen Untertiteln) gepostet. Ich finde es auf die Schnelle leider nicht.

                      Bis demnächst
                      Matthias

                      --
                      Pantoffeltierchen haben keine Hobbys.
                      ¯\_(ツ)_/¯
                      1. @@Matthias Apsel

                        @Christian Kruse hatte mal ein passendes Video (sogar mit deutschen Untertiteln) gepostet. Ich finde es auf die Schnelle leider nicht.

                        Suche nach author:kruse videohttps://forum.selfhtml.org/self/2017/oct/31/js-datum-addieren/1707575#m1707575

                        LLAP 🖖

                        --
                        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                        1. Hallo Gunnar,

                          Suche nach author:kruse video

                          ich kann mir nicht helfen, aber dieser Satz wirkt befremdlich auf mich 😂

                          LG,
                          CK

                2. @@pl

                  $wds = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Sonnabend','Sonntag');
                  echo $wds[(4 + strtotime("1970-1-1")/86400) % 7];
                  

                  Könntest du damit aufhören, mit unsinnigen Funktionen rumzuhantieren?

                  Und vor allem:

                  Darüber sollte sich jeder, der mit PHPs Datumsfunktionen rechnet, im Klaren sein: Daß PHP stets über eine lokale Zeitzone rechnet!

                  Könntest du damit aufhören, jedesmal, wenn du etwas nicht verstehst, zu sagen, dass andere sich über irgendwas im Klaren sein müssten? Danke.

                  LLAP 🖖

                  --
                  „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                3. Hallo pl,

                  $date = new DateTime('1970-01-01');
                  echo $date->format('l, Y-m-d') . "\n";
                  
                  $date = new DateTime('1970-01-01', new DateTimeZone('Pacific/Tahiti'));
                  echo $date->format('l, Y-m-d') . "\n";
                  
                  // Thursday, 1970-01-01
                  // Thursday, 1970-01-01
                  

                  Bis demnächst
                  Matthias

                  --
                  Pantoffeltierchen haben keine Hobbys.
                  ¯\_(ツ)_/¯
        2. @@pl

          setlocale() ist überflüssig. Denn 1. wird die Zeitzone sowieso gesetzt und 2. liefert strtotime() daraufhin einen Zeitstempel welcher exakt der geetzten Zeitzone entspricht.

          Unüberlegte Antworten sind überflüssig. Denn 1. müllen sie das Forum zu und 2. lassen sie den Autoren in schlechtem Licht dastehen.

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  2. Hallo Bernd,

    $datum=strtotime("2019-05-18");
    $tage = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); 
    $tag = $tage[date("w",$datum)];  
    echo $tag;
    

    gibt es noch eine einfachere Möglichkeit?

    setlocale(LC_ALL, "de_DE.UTF-8");
    echo strftime("%A", $datum);
    

    Könnte unter Windows Probleme geben – zum Glück sind die meisten Produktiv-Umgebungen Unixoide 😀 Aber siehe Manual.

    LG,
    CK

    1. Tach!

      setlocale(LC_ALL, "de_DE.UTF-8");
      echo strftime("%A", $datum);
      

      Könnte unter Windows Probleme geben – zum Glück sind die meisten Produktiv-Umgebungen Unixoide 😀 Aber siehe Manual.

      Zum Beispiel die rote Warnung bei setlocale() kurz vor den Userkommentaren. Die Locale-Einstellung zu ändern kann Nebenwirkungen nach sich ziehen. Selbst dann, wenn man sie nach Gebrauch wieder auf den bisherigen Wert setzt. Oder sind meine Bedenken unbegründet?

      dedlfix.

      1. Hallo dedlfix,

        Zum Beispiel die rote Warnung bei setlocale() kurz vor den Userkommentaren. Die Locale-Einstellung zu ändern kann Nebenwirkungen nach sich ziehen. Selbst dann, wenn man sie nach Gebrauch wieder auf den bisherigen Wert setzt. Oder sind meine Bedenken unbegründet?

        Klassische Race Condition. Möglich, dass das Probleme gibt, aber wenn es solche Probleme geben kann, dann schützt man sich vor solchen Effekten nur durch die Nicht-Verwendung aller Features, die nicht Threadsafe sind, denn das kann an anderen Stellen auch auftreten.

        Generell ist die Benutzung von Locales aber zu empfehlen und eher unproblematisch, man setzt den Wert ja eh immer nur auf den gleichen Wert. Ist halt eine gut abgehangene API. Und in einer Shared-Hosting-Umgebung hat man genau wegen solcher Effekte eher voneinander isolierte Prozesse und nicht Threads.

        LG,
        CK

    2. @@Christian Kruse

      setlocale(LC_ALL, "de_DE.UTF-8");
      echo strftime("%A", $datum);
      

      Und wenn man nun „Sonnabend“ statt „Samstag“ haben möchte?

      (Bei Monatsnamen „Jänner“ statt „Januar“ geht.)

      Es gibt kaum ein Problem, was wir hier im Forum nicht schon hatten. Bernd hätte nur mal die Suche bemühen müssen.

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      1. Hallo Gunnar,

        setlocale(LC_ALL, "de_DE.UTF-8");
        echo strftime("%A", $datum);
        

        Und wenn man nun „Sonnabend“ statt „Samstag“ haben möchte?

        Dann mach dir im Notfall dein eigenes (abgeleitetes) Locale.

        LG,
        CK

  3. Der 1.1.1970 war ein Donnerstag. Mit der Anzahl der vergangenen Tage und Modulo 7 kriegst Du damit auch den Wochentag raus. MFG

    1. Tach!

      Der 1.1.1970 war ein Donnerstag. Mit der Anzahl der vergangenen Tage und Modulo 7 kriegst Du damit auch den Wochentag raus.

      Das Problem der Tagesnummer war bereits mit date("w",$datum) ausreichend und ohne derartige Umstände gelöst.

      dedlfix.

    2. Ich kann immer wieder nur mit dem Kopf schütteln warum man auf so eine Antwort ein - vergeben kann. Finde ich ehrlich gesagt unter aller Sau! Wenn ich als Fragender ein - vergeben würde OK, aber woher will ein anderer wissen ob diese Antwort für mich schlecht bzw. nicht Hilfreich ist. Das nennt man im 21 Jahrhundert Mobbing, was hier betrieben wird.

      1. Hallo Bernd,

        dauernde Wiederholung macht es nicht besser. Die Bewertungsfunktion wird bleiben. Wenn es dir nicht gefällt, frage deine Fragen woanders.

        Niemand ist für eine Bewertung eine Rechenschaft schuldig.

        LG,
        CK

        1. Bestimmt du dieses? Ich denke nicht Wenn dann im Verein! Außerdem sieht man ja was ihr mit dieser Option erreicht, nämlich eine Verschlechterung des Forums. Außerdem ist das Forum eh auf einem absteigendem Ast! Und warum? Genau aus diesem Grund.

          1. Hallo,

            Bestimmt du dieses?

            Hihihi, wer denn sonst? CK ist verantwortlich für die Software, die für dieses Forum im Hintergrund rauscht. Und zwar sehr gut!

            Gruß
            Kalk

      2. Hallo Bernd,

        Ich kann immer wieder nur mit dem Kopf schütteln warum man auf so eine Antwort ein - vergeben kann. Finde ich ehrlich gesagt unter aller Sau! Wenn ich als Fragender ein - vergeben würde OK, aber woher will ein anderer wissen ob diese Antwort für mich schlecht bzw. nicht Hilfreich ist. Das nennt man im 21 Jahrhundert Mobbing, was hier betrieben wird.

        Nein. Dieses Minus ist ein rein fachliches. Begründung in dedlfix' Antwort.

        Bis demnächst
        Matthias

        --
        Pantoffeltierchen haben keine Hobbys.
        ¯\_(ツ)_/¯
        1. Hallo Matthias,

          sagt wer? Weiß du ob dieser Hinweis für mich fachlich falsch ist? Daher sollte so eine Option nur einem Beitragsinhaber zur Verfügung stehen denn nur er weiß was richtig und falsch für sich ist.

          1. Hallo Bernd,

            sagt wer?

            Ich.

            Weiß du ob dieser Hinweis für mich fachlich falsch ist?

            Er ist ja nicht falsch. Er hilft dir nur nicht weiter, weil es bereits eine effiziente Lösung durch date("w",$datum) gibt.

            Daher sollte so eine Option nur einem Beitragsinhaber zur Verfügung stehen denn nur er weiß was richtig und falsch für sich ist.

            Du kannst ja diese Antwort akzeptieren. Dafür ist diese Option da.

            Bis demnächst
            Matthias

            --
            Pantoffeltierchen haben keine Hobbys.
            ¯\_(ツ)_/¯
            1. Er ist ja nicht falsch. Er hilft dir nur nicht weiter, weil es bereits eine effiziente Lösung durch date("w",$datum) gibt.

              Und genau da sind wir beim Punkt. Es ist nicht falsch aber es wird ein - vergeben. Es könnten jetzt andere denken, ein - Punkt, also die die Antwort falsch. Dann wird auf den Namen geschaut und man könnte auf den Gedanken kommen PL hat in der Regel nur - Punkte also ignorieren wir ihn, was totaler Müll ist, weil es so nicht stimmt. Für dich mag die Antwort nicht Hilfreich sein, für mich oder jemand anderen schon. Daher bleibe ich bei meiner Meinung das - ist totaler Misst und sorgt nur für schlechte Stimmung, nein ich gehe wie vorhin ein Schritt weiter und sage dieses ist reines Mobbing im 21. Jahrhundert.

              1. Tach!

                Er ist ja nicht falsch. Er hilft dir nur nicht weiter, weil es bereits eine effiziente Lösung durch date("w",$datum) gibt.

                Und genau da sind wir beim Punkt. Es ist nicht falsch aber es wird ein - vergeben.

                Ich bewerte nicht globalgalaktisch sondern auf das Problem bezogen. Das Antwort ist zwar eine generelle Möglichkeit für ein - hier nicht vorhandenes - Problem, aber sie war trotzdem nicht gut, weil es eine deutlich einfachere Lösung gibt.

                Es könnten jetzt andere denken, ein - Punkt, also die die Antwort falsch.

                Man kann auch in Zwischenschritten denken anstatt in den Extremen richtig/falsch, und die Bewertugen als besser/schlechter ansehen.

                Dann wird auf den Namen geschaut und man könnte auf den Gedanken kommen PL hat in der Regel nur - Punkte also ignorieren wir ihn, was totaler Müll ist, weil es so nicht stimmt.

                Genau, das stimmt so nicht, wie du das hier darzustellen versuchst.

                Für dich mag die Antwort nicht Hilfreich sein, für mich oder jemand anderen schon. Daher bleibe ich bei meiner Meinung das - ist totaler Misst und sorgt nur für schlechte Stimmung, nein ich gehe wie vorhin ein Schritt weiter und sage dieses ist reines Mobbing im 21. Jahrhundert.

                Deine Meinung ist nicht die einzige. Schlechte Stimmung erzeugt auch, wenn Probleme nicht mehr angesprochen werden können, weil immer gleich einer um die Ecke kommt und "Mobbing!" ruft.

                dedlfix.

          2. Hallo,

            Weiß du ob dieser Hinweis für mich fachlich falsch ist? Daher sollte so eine Option nur einem Beitragsinhaber zur Verfügung stehen denn nur er weiß was richtig und falsch für sich ist.

            Antworten hier im Forum sind eben nicht nur für den „Beitragsinhaber“ (Was genau soll das eigentlich sein?), sondern für alle Forumsteilnehmer da. Viele die hierherkommen, wissen eben nicht, was richtig oder falsch, bzw. besser für sie ist.

            Daher: Bewertungen hier sind nicht persönlich zu verstehen, sondern beziehen sich (in der Regel) auf den Sachverhalt.

            Gruß
            Kalk

            1. Und die Erklärung von PL ist in diesem Fall falsch? Nein, wie Matthias bereits geschrieben hat. Für euch oder ihn was er falsch oder zu umständlich weißt du ob mir als fragender diese Option nicht besser gefällt weil sich damit mehr anstellen lässt? Nein, ich denke dieses weißt du nicht.

              1. Tach!

                Und die Erklärung von PL ist in diesem Fall falsch? Nein, wie Matthias bereits geschrieben hat. Für euch oder ihn was er falsch oder zu umständlich weißt du ob mir als fragender diese Option nicht besser gefällt weil sich damit mehr anstellen lässt? Nein, ich denke dieses weißt du nicht.

                Du lenkst vom Problem ab, mit unsachlichen Argumenten. Als Threaderöffner hast du die Möglichkeit, Anworten als akzeptiert kennzeichnen, und so zu zeigen, was deine Meinung ist. Dazu muss man nicht andere Meinungsäußerungen zu unterdrücken versuchen. Das "vom Threadersteller akzeptierte Antwort" wird sogar prominent hervorgehoben, so dass es nicht in den Bewertungen der anderen untergeht.

                Unsachlich ist auch, dass man mit Tagen selbst zu zählen mehr anstellen könnte, als mit den bereits in PHP vorhandenen Möglichkeiten.

                dedlfix.

                1. Unsachlich ist auch, dass man mit Tagen selbst zu zählen mehr anstellen könnte, als mit den bereits in PHP vorhandenen Möglichkeiten.

                  Unsachlich ist, wenn du versuchst nur deine Antwort als "die beste" darzustellen. Du weißt eben nicht was mir am besten gefällt! Aber dieses ist man hier im Forum von einem anderen Herren ja schon gewohnt! Daher bleibe ich bei meiner Meinung, ein - ist eine Art von Mobbing da ein außenstehender nicht weiß warum ein - vergeben wurde und schnell zum Entschluss kommen kann diese Antwort ist scheiße, ich nehme lieber eine anderen, was oftmals überhaupt nicht stimmt. Außerdem werden Beiträge sehr schlecht leserlich dargestellt eine weitere Form von Beeinflussung.

      3. Tach!

        Das nennt man im 21 Jahrhundert Mobbing, was hier betrieben wird.

        Ständiges Gemotze gegen andere Forumsmitglieder (auch in allgmeiner Form) kann man ebenso bewerten.

        dedlfix.