Pit: Datumrechnereien

0 72

Datumrechnereien

Pit
  • php
  1. 0
    dedlfix
    1. 0
      Pit
      1. 0
        Matthias Apsel
        1. 0
          Pit
          1. 0
            Matthias Apsel
            1. 0
              Pit
              1. 0
                Matthias Apsel
                1. 0
                  Pit
      2. 0
        dedlfix
        1. 0
          Pit
          1. 0
            dedlfix
            1. 0
              Pit
              1. 0
                pl
                1. 0
                  Pit
                  1. 0
                    pl
                    1. 1
                      Tabellenkalk
                      1. 0
                        pl
                        1. 0
                          Gunnar Bittersmann
                          1. 0
                            pl
                            1. 0
                              Gunnar Bittersmann
                              1. 0
                                pl
                  2. 0
                    pl
                    1. 0
                      Pit
                      1. 0

                        Datumrechnereien, Algorithmen

                        pl
                        1. 1
                          dedlfix
                          1. 0
                            Gunnar Bittersmann
                            1. -1
                              pl
                              1. 0
                                Matthias Apsel
                                1. 0
                                  Gunnar Bittersmann
                                  • menschelei
                              2. 0
                                Gunnar Bittersmann
                                1. 0
                                  pl
                                  1. 0
                                    Gunnar Bittersmann
                                    1. 0
                                      pl
                                      1. 2
                                        Mitleser
                                        1. 0
                                          pl
                                          1. 0
                                            Gunnar Bittersmann
                                      2. 1
                                        Matthias Apsel
                                        1. 0
                                          pl
                                          1. 0
                                            Gunnar Bittersmann
                                            1. 0
                                              MudGuard
                                              1. 0
                                                Gunnar Bittersmann
                                        2. 0
                                          Gunnar Bittersmann
                                          1. 0
                                            Matthias Apsel
                                          2. 0
                                            Gunnar Bittersmann
                                            1. 0
                                              Gunnar Bittersmann
                                            2. 0
                                              peter
                                            3. 0
                                              MudGuard
                                          3. 0
                                            dedlfix
                                          4. 0
                                            peter
              2. 0
                dedlfix
                1. 0
                  Pit
                  1. 0
                    dedlfix
                    1. 0
                      Pit
                      1. 1
                        dedlfix
                        1. 0
                          Pit
                          1. 0
                            Gunnar Bittersmann
                        2. 0
                          Gunnar Bittersmann
  2. 0
    MudGuard
    1. 0
      Matthias Apsel
      1. 0
        Pit
        1. 0
          Matthias Apsel
          • zeit & datum
        2. 0
          MudGuard
          1. 0
            Matthias Apsel
            • zeit & datum
    2. 0
      Pit
    3. 0
      Gunnar Bittersmann
      1. 0
        Matthias Apsel
        1. 0
          Gunnar Bittersmann
  3. 0
    Bernd
    1. 0
      MudGuard
      1. 0
        Bernd
    2. 0
      Matthias Apsel

Hallo,

kann mir einer das erklären?


$jahr=2017;
$kalenderwoche = 52;
$relevantes_datum = $jahr."W".$kalenderwoche;
$erg = date('Y', strtotime($relevantes_datum." +1 week"));

echo $erg; // 2018


$jahr=2018;
$kalenderwoche = 52;
$relevantes_datum = $jahr."W".$kalenderwoche;
$erg = date('Y', strtotime($relevantes_datum." +1 week"));

echo $erg; // 2018

Und wie komme ich auf 2019?

Pit

  1. Tach!

    kann mir einer das erklären?

    Versuch die Antwort mit PHP selbst zu finden. Lass dir nicht nur Y sondern auch Monat und Tag ausgeben.

    dedlfix.

    1. Hi dedlfix,

      Versuch die Antwort mit PHP selbst zu finden. Lass dir nicht nur Y sondern auch Monat und Tag ausgeben.

      Hast recht. W ist immer Montags. Gibts eine bessere Lösung als +1 week + 3day, um an den Donnerstag der Woche zu kommen?

      Pit

      1. Hallo Pit,

        Hast recht. W ist immer Montags. Gibts eine bessere Lösung als +1 week + 3day, um an den Donnerstag der Woche zu kommen?

        strtotime("first thursday of $year")?

        http://sandbox.onlinephpfunctions.com/code/d5bbba50ba9cd14e114fa21dd4792c215fb20567

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
        1. Hi Matthias,

          Gibts eine bessere Lösung als +1 week + 3day, um an den Donnerstag der Woche zu kommen?

          strtotime("first thursday of $year")?

          Hm... anders, aber besser? Dennoch danke für den Hinweis,

          Pit

          1. Hallo Pit,

            Gibts eine bessere Lösung als +1 week + 3day, um an den Donnerstag der Woche zu kommen?

            strtotime("first thursday of $year")?

            Hm... anders, aber besser?

            Da dein Versuch offenbar nicht immer das richtige Ergebnis liefert, …

            Bis demnächst
            Matthias

            --
            Rosen sind rot.
            1. Hi Matthias,

              Gibts eine bessere Lösung als +1 week + 3day, um an den Donnerstag der Woche zu kommen?

              Da dein Versuch offenbar nicht immer das richtige Ergebnis liefert, …

              Welcher Versuch? Der +1 week + 3day ? Liefert ganz sicher (in mieinem obigem Bsp.) immer das korrekte Ergebnis.

              Pit

              1. Hallo Pit,

                Welcher Versuch? Der +1 week + 3day ? Liefert ganz sicher (in mieinem obigem Bsp.) immer das korrekte Ergebnis.

                Alles klar. Warum fragst du dann?

                Bis demnächst
                Matthias

                --
                Rosen sind rot.
                1. Hallo Pit,

                  Welcher Versuch? Der +1 week + 3day ? Liefert ganz sicher (in mieinem obigem Bsp.) immer das korrekte Ergebnis.

                  Alles klar. Warum fragst du dann?

                  Hi Matthias,

                  biste jetzt beleidigt? 😉

                  Pit

      2. Tach!

        Gibts eine bessere Lösung als +1 week + 3day, um an den Donnerstag der Woche zu kommen?

        Was ist überhaupt die Aufgabenstellung? Anfang des Jahres ist auf alle Fälle immer der 1.1. Das kann man mit mktime(), der Jahreszahl und zwei konstanten 1en einfach zu einen Timestamp berechnen.

        dedlfix.

        1. Hi dedlfix,

          Was ist überhaupt die Aufgabenstellung? Anfang des Jahres ist auf alle Fälle immer der 1.1. Das kann man mit mktime(), der Jahreszahl und zwei konstanten 1en einfach zu einen Timestamp berechnen.

          Aufgabe ist, die erste KW eines Jahres zu finden. Und Matthias sagt, dass sei in BRD immer der erste Do im Jahr. Und da strtotime("{$jahr}-W{$kalenderwoche}") immer den (timestamp eines) Montag einer KW ergibt, kann ich auch immer 3 Tage drauf rechnen. Dann habe ich den (timestamp eines) Do, auch im der ersten KW eines neuen Jahres.

          Pit

          1. Tach!

            Aufgabe ist, die erste KW eines Jahres zu finden.

            Warum sucht du dann nicht mit beispielsweise 2019W01? Dass der erste Tag der ersten Woche durchaus einer vom Vorjahr sein kann, liegt in der Natur unserer Festlegung von "erster Woche".

            Und Matthias sagt, dass sei in BRD immer der erste Do im Jahr.

            Das hast du ungenau formuliert oder sogar ungenau verstanden. Es ist immer die Woche mit dem ersten Donnerstag im neuen Jahr. Der erste Tag der Woche 1 von 2019 ist der 31.12.2018. Und der gehört auch nicht etwa zur 53. Woche 2018, eine solche gibt es bei uns nicht. Also jedenfalls nicht in dem Jahr, aber beispielsweise 2020.

            Und da strtotime("{$jahr}-W{$kalenderwoche}") immer den (timestamp eines) Montag einer KW ergibt, kann ich auch immer 3 Tage drauf rechnen. Dann habe ich den (timestamp eines) Do, auch im der ersten KW eines neuen Jahres.

            Also was brauchst du nun? Den Tag der ersten Woche? Da musst du nichts rechnen, den gibt strtotime() mit "{$jahr}W01".

            dedlfix.

            1. Hi dedlfix,

              Das hast du ungenau formuliert

              Ok.

              Also was brauchst du nun? Den Tag der ersten Woche? Da musst du nichts rechnen, den gibt strtotime() mit "{$jahr}W01".

              Ich brauche den Rechenweg, der mich aus {$jahr}W52 zielsicher in die 1 Woche des nachfolgenden Jahres bringt und dachte an +1 week + 3day oder +10day.

              Pit

              1. Also was brauchst du nun? Den Tag der ersten Woche? Da musst du nichts rechnen, den gibt strtotime() mit "{$jahr}W01".

                Ich brauche den Rechenweg, der mich aus {$jahr}W52 zielsicher in die 1 Woche des nachfolgenden Jahres bringt und dachte an +1 week + 3day oder +10day.

                Auf den Mo der KW52 7 Tage addieren, fertig. Dann bekommst Du entweder die 1. Woche des nächsten Jahres oder die 53. Woche (falls es die gibt). Im Fall 2017 erhältst Du die 1. Woche des nächsten Jahres. MfG

                1. Hi Rolf,

                  Auf den Mo der KW52 7 Tage addieren, fertig. Dann bekommst Du entweder die 1. Woche des nächsten Jahres oder die 53. Woche (falls es die gibt). Im Fall 2017 erhältst Du die 1. Woche des nächsten Jahres. MfG

                  Ich denke, Du liegst falsch. Klicke in Deinem Beispiel mal auf "Nächste Woche" 😉

                  Edit: Du reproduzierst genau meine Ausgangsfrage, rechne mal 10 Tage drauf und setze den Wochenanfang wieder auf Montag, dann läufts (übrigens auch in 2020 mit 53 KWs).

                  Pit

                  1. Klicke in Deinem Beispiel mal auf "Nächste Woche" 😉

                    Habs korrigiert, Danke für den Bugreport 😉

                    PS, Fazit: Zur Angabe einer KW gehört immer auch das Jahr.

                    1. Hallo,

                      PS, Fazit: Zur Angabe einer KW gehört immer auch das Jahr.

                      -Treffen wir uns nächsten Monat?
                      -Ja, halb neun.
                      -Ok, bitte sei pünktlich!

                      Gruß
                      Kalk

                      1. Hallo,

                        PS, Fazit: Zur Angabe einer KW gehört immer auch das Jahr.

                        -Treffen wir uns nächsten Monat?
                        -Ja, halb neun.
                        -Ok, bitte sei pünktlich!

                        Ja, es gibt Tage die sich dadurch auszeichnen, daß sie rechnerisch sowohl in das eine, als auch in das andere Jahr gehören. Der 31.12.2018 ist so ein Tag, er gehört von Tag und Monat her zum Jahr 2018, von der Kalenderwoche her jedoch zum Jahr 2019.

                        Programmiertechnisch heißt das, daß man auf einem Zeitstempel zwei verschiedene Jahre abzubilden hat. MfG

                        PS: Wenn heute der 24.12.2018 wäre..

                        • treffen wir uns in der 1.KW des nächsten Jahres um 9 Uhr?
                        • Ja aber sieh zu, daß Du dieses Jahr noch kommst.

                        Ist eindeutig!

                        1. @@pl

                          Programmiertechnisch heißt das, daß man auf einem Zeitstempel zwei verschiedene Jahre abzubilden hat.

                          ?? Hat man das?

                          Ein Zeitstempel weiß nichts von einem Jahr. Der zählt seine Sekunden (oder in JavaScript Millisekunden) – nicht mehr und nicht weniger.

                          Sowas wie „Jahr“ kommt erst ins Spiel, wenn man einen Zeitstempel als Datum formatiert ausgeben (oder anderweitig verarbeiten) will. Dafür gibt es in Programmiersprachen entsprechende Methoden – da hat man selbst nichts abzubilden.

                          LLAP 🖖

                          --
                          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                          1. @Gunnar Bittersmann

                            Programmiertechnisch heißt das, daß man auf einem Zeitstempel zwei verschiedene Jahre abzubilden hat.

                            ?? Hat man das?

                            Ja, mit einer entsprechenden Programmiertechnik!

                            Ein Zeitstempel weiß nichts von einem Jahr. Der zählt seine Sekunden (oder in JavaScript Millisekunden) – nicht mehr und nicht weniger.

                            Sowas wie „Jahr“ kommt erst ins Spiel, wenn man einen Zeitstempel als Datum formatiert ausgeben (oder anderweitig verarbeiten) will. Dafür gibt es in Programmiersprachen entsprechende Methoden – da hat man selbst nichts abzubilden.

                            Eine Methode zum Formatieren reicht da eben nicht. Da muß man schon die richtige Programmiertechnik anwenden weil 2 Jahre im Spiel sind die verschieden sein können. Das sind Tag und Monat ja auch und wenn man objektorientiert arbeitet, sind das alles Eigenschaften die zu einem bestimmten Datum gehören. Genauso wie der Zeitstempel selbst nur eine Eigenschaft ist, das Objekt jedoch eindeutig kennzeichnet (Identifikator).

                            MfG, schönen Sonntag.

                            1. @@pl

                              Eine Methode zum Formatieren reicht da eben nicht. Da muß man schon die richtige Programmiertechnik anwenden weil 2 Jahre im Spiel sind die verschieden sein können.

                              Die richtige Programmiertechnik ist in dem Fall die Methode zum Formatieren: date('Y',) vs. date('o',)

                              Das sind Tag und Monat ja auch und wenn man objektorientiert arbeitet, sind das alles Eigenschaften die zu einem bestimmten Datum gehören.

                              Auch dafür bieten Programmiersprachen bereits entsprechende Methoden. In JavaScript bspw. heißen sie getDate(), getMonth().

                              LLAP 🖖

                              --
                              “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                              1. @Gunnar Bittersmann

                                Auch dafür bieten Programmiersprachen bereits entsprechende Methoden. In JavaScript bspw. heißen sie getDate(), getMonth().

                                Siehst Du, wir brauchen Methoden welche die entsprechenden Eigenschaften rausrücken! Z.B. getYear4Kalenderwoche() und getYear4Datum() und das war genau das, was ich gestern bei meiner Anwendung nachgeholt habe (danke Pit).

                                Das ist ja der Sinn einer objektorientierten Programmierung, daß man mit Veränderungen besser zurechtkommt. So hatte meine Methode kw() zur Berechnung der KW zwar auch das dazugehörige Jahr schon berechnet aber nicht zurückgegeben, weil bis dahin die Ausgabe der KW nur eine Frage der Formatierung war und das zur KW gehörige Jahr als Rückgabewert in bisherigen Anwendungen keine Rolle spielte.

                                Anstatt nun diesen Rückgabewert anders zu formatieren (also das Jahr hinzuzufügen), was Änderungen in ungezählten anderen Anwendungen nach sich gezogen hätte, genügte es, das zur KW gehörige Jahr in eine weitere Eigenschaft der Datuminstanz zu setzen und diese Eigenschaft year4kw public zu machen, fertig.

                                Zur eigentlichen Berechnung des zur KW gehörigen Jahres benötigt man 2 Dinge, den Tag zur ersten Kalenderwoche und die Anzahl möglicher Kalenderwochen eines Jahres (DIN1355).

                                Schönen Sonntag 😉

                  2. hi,

                    Edit: Du reproduzierst genau meine Ausgangsfrage, rechne mal 10 Tage drauf und setze den Wochenanfang wieder auf Montag, dann läufts (übrigens auch in 2020 mit 53 KWs).

                    Nene, 7 Tage ist schon richtig.. Der Trick dabei ist, nach der Addition festzustellen, ob sich außer der Woche auch das Jahr geändert hat.

                    Wenn wir zum Mo, 24.12.2018, KW 2018/52, 7 Tage addieren, erhalten wir den 31.12.2018 und der liegt in KW 2019/01. MfG

                    1. Hi,

                      Nene, 7 Tage ist schon richtig.. Der Trick dabei ist, nach der Addition festzustellen, ob sich außer der Woche auch das Jahr geändert hat.

                      Sehe ich anders. Entweder 7 Tage, dann aber auch, wie dedlfix schon sagt, aufs Datum aufaddiert und erst dann holt man sich vom neuen Datum die KW. (da brauchst Du aber nichts mehr prüfen, sondern hast autom. die korrekte KW und das korrekte Jahr) Oder 10 tage auf den Montag der lfd. KW und anschließend die Woche wieder mit dem Montag der errechneten KW anfangen. Da hast Du auch ohne jede Prüfung die korrekte KW und das korrekte jahr.

                      Pit

                      1. Hi,

                        Nene, 7 Tage ist schon richtig.. Der Trick dabei ist, nach der Addition festzustellen, ob sich außer der Woche auch das Jahr geändert hat.

                        Sehe ich anders. Entweder 7 Tage, dann aber auch, wie dedlfix schon sagt, aufs Datum aufaddiert und erst dann holt man sich vom neuen Datum die KW. (da brauchst Du aber nichts mehr prüfen, sondern hast autom. die korrekte KW und das korrekte Jahr) Oder 10 tage auf den Montag der lfd. KW und anschließend die Woche wieder mit dem Montag der errechneten KW anfangen. Da hast Du auch ohne jede Prüfung die korrekte KW und das korrekte jahr.

                        Es gibt aber 3 Fälle bezüglich eines zur KW gehörigen Jahres:

                        1. das KWJahr ist dasselbe wie das Jahr zum Datum
                        2. das KWJahr fällt in das nächste Jahr (Montag, 31.12.2018 KW 01/19)
                        3. das KWJahr fällt in das vorherige Jahr (Sonntag, 1.1.2017 KW 52/16 )

                        Ob Dein Algorithmus alle Fälle abdeckt, wäre zu prüfen.

                        MfG

                        1. Tach!

                          Es gibt aber 3 Fälle bezüglich eines zur KW gehörigen Jahres:

                          1. das KWJahr ist dasselbe wie das Jahr zum Datum
                          2. das KWJahr fällt in das nächste Jahr (Montag, 31.12.2018 KW 01/19)
                          3. das KWJahr fällt in das vorherige Jahr (Sonntag, 1.1.2017 KW 52/16 )

                          Ob Dein Algorithmus alle Fälle abdeckt, wäre zu prüfen.

                          Da muss man bei PHP nichts weiter prüfen, denn date('W') liefert die richtige Wochennummer zu jedem Zeitpunkt, ohne Ausnahmen.

                          dedlfix.

                          1. @@dedlfix

                            Es gibt aber 3 Fälle bezüglich eines zur KW gehörigen Jahres: Da muss man bei PHP nichts weiter prüfen, denn date('W') liefert die richtige Wochennummer zu jedem Zeitpunkt, ohne Ausnahmen.

                            Es ging doch aber ums Jahr, nicht die Woche?

                            Wie ich schon sagte: Da muss man bei PHP nichts weiter implementieren, denn date('o') liefert das richtige Jahr zu jedem Zeitpunkt, ohne Ausnahmen.

                            LLAP 🖖

                            --
                            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                            1. @Gunnar Bittersmann

                              Es gibt aber 3 Fälle bezüglich eines zur KW gehörigen Jahres: Da muss man bei PHP nichts weiter prüfen, denn date('W') liefert die richtige Wochennummer zu jedem Zeitpunkt, ohne Ausnahmen.

                              Es ging doch aber ums Jahr, nicht die Woche?

                              Wie ich schon sagte: Da muss man bei PHP nichts weiter implementieren, denn date('o') liefert das richtige Jahr zu jedem Zeitpunkt, ohne Ausnahmen.

                              Es kommt aber darauf an, nicht das Jahr schlechthin sondern das zur Kalenderwoche gehörige richtige Jahr zu liefern.

                              Und hier beginnt für @Gunnar Bittersmann und @dedlfix die Problemgeschichte wieder von vorne, weils entweder nicht verstehen oder nicht verstehen wollen, daß man das mit PHPs Datumsformatierungsfunktionen allein nicht lösen kann. MfG

                              1. Hallo pl,

                                Es kommt aber darauf an, nicht das Jahr schlechthin sondern das zur Kalenderwoche gehörige richtige Jahr zu liefern.

                                Und hier beginnt für @Gunnar Bittersmann und @dedlfix die Problemgeschichte wieder von vorne, weils entweder nicht verstehen oder nicht verstehen wollen, daß man das mit PHPs Datumsformatierungsfunktionen allein nicht lösen kann. MfG

                                Versteh ich nich - erklär mal.

                                Bis demnächst
                                Matthias

                                --
                                Rosen sind rot.
                                1. @@Matthias Apsel

                                  Versteh ich nich

                                  Du gehörst halt zu uns.

                                  LLAP 🖖

                                  --
                                  “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                              2. @@pl

                                Wie ich schon sagte: Da muss man bei PHP nichts weiter implementieren, denn date('o') liefert das richtige Jahr zu jedem Zeitpunkt, ohne Ausnahmen.

                                Es kommt aber darauf an, nicht das Jahr schlechthin sondern das zur Kalenderwoche gehörige richtige Jahr zu liefern.

                                Ach? Und date('o', strtotime('2016-01-01')) liefert genau was? Richtig, 2015.

                                Und hier beginnt für @Gunnar Bittersmann und @dedlfix die Problemgeschichte wieder von vorne, weils entweder nicht verstehen oder nicht verstehen wollen, daß man das mit PHPs Datumsformatierungsfunktionen allein nicht lösen kann.

                                Und hier beginnt für @pl die Problemgeschichte wieder von vorne: alle anderen verstehen nicht, nur pl hat den vollen Durchblick. Nur dass die Geschichte nicht wahr ist und wohl auch niemals wahr werden wird.

                                LLAP 🖖

                                --
                                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                                1. hi,

                                  Ach? Und date('o', strtotime('2016-01-01')) liefert genau was? Richtig, 2015.

                                  Das mag sein. PHPs Datumsformatierungsfunktionen sind mächtig, verstehe. So mächtig, daß man damit eine Ausgabe wie Freitag, 01.01.2016 KW 53/2015 mit einer einzigen Ausgabe erzeugen kann?

                                  Das will ich sehen 😉

                                  1. @@pl

                                    Ach? Und date('o', strtotime('2016-01-01')) liefert genau was? Richtig, 2015.

                                    Das mag sein. PHPs Datumsformatierungsfunktionen sind mächtig, verstehe. So mächtig, daß man damit eine Ausgabe wie Freitag, 01.01.2016 KW 53/2015 mit einer einzigen Ausgabe erzeugen kann?

                                    Ja.

                                    Das will ich sehen 😉

                                    Das dafür notwendige Rüstzeug hatte ich schon verlinkt. Wie wär’s, wenn du das mal Übung selber machst?

                                    LLAP 🖖

                                    --
                                    “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                                    1. Ach? Und date('o', strtotime('2016-01-01')) liefert genau was? Richtig, 2015.

                                      Das mag sein. PHPs Datumsformatierungsfunktionen sind mächtig, verstehe. So mächtig, daß man damit eine Ausgabe wie Freitag, 01.01.2016 KW 53/2015 mit einer einzigen Ausgabe erzeugen kann?

                                      Ja.

                                      Das will ich sehen 😉

                                      Das dafür notwendige Rüstzeug hatte ich schon verlinkt. Wie wär’s, wenn du das mal Übung selber machst?

                                      Ok, ich in Perl:

                                      my $k = Kalenderwoche->new( date => "1.1.2016") 
                                        or die $@;
                                      printf "%s, %02d.%02d.%04d KW %d/%d", 
                                        $k->wochentag, $k->day, $k->month, $k->year, @{$k->kwy};
                                      
                                      # Freitag, 01.01.2016 KW 53/2015
                                      

                                      Du in PHP:

                                      1. Ok, ich in Perl:

                                        my $k = Kalenderwoche->new( date => "1.1.2016") 
                                          or die $@;
                                        printf "%s, %02d.%02d.%04d KW %d/%d", 
                                          $k->wochentag, $k->day, $k->month, $k->year, @{$k->kwy};
                                        
                                        # Freitag, 01.01.2016 KW 53/2015
                                        

                                        Du in PHP:

                                        echo myHiddenFreakySuperMagic("1.1.2016"); # Freitag, 01.01.2016 KW 53/2015
                                        

                                        Noch kürzer! Daumen hoch!

                                        1. echo myHiddenFreakySuperMagic("1.1.2016"); # Freitag, 01.01.2016 KW 53/2015
                                          

                                          Noch kürzer! Daumen hoch!

                                          Genau. Daß PHP intern objektorientiert arbeitet, das wissen nicht einmal die PHP Programmierer. Da kommt dann eben son Käse raus wie das Jahr ausgeben ist nur eine Frage der Formatierung des Timestamps -- lächerlich.

                                          1. @@pl

                                            Da kommt dann eben son Käse raus wie das Jahr ausgeben ist nur eine Frage der Formatierung des Timestamps -- lächerlich.

                                            Genau das wurde dir gezeigt: dass das Jahr ausgeben nur eine Frage der Formatierung des Timestamps ist.

                                            Dass du das immer noch als Käse bezeichnest ist – nun ja – lächerlich.

                                            LLAP 🖖

                                            --
                                            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                                      2. Hallo pl,

                                        Du in PHP:

                                        echo date("l, d.m.Y \K\W W/o", strtotime("01.01.2016"));
                                        
                                        // Freitag, 01.01.2016 KW 53/2015
                                        

                                        Bis demnächst
                                        Matthias

                                        --
                                        Rosen sind rot.
                                        1. Du in PHP:

                                          echo date("l, d.m.Y \K\W W/o", strtotime("01.01.2016"));
                                          
                                          // Freitag, 01.01.2016 KW 53/2015
                                          

                                          Also gehts ja doch. Danke.

                                          1. @@pl

                                            Also gehts ja doch. Danke.

                                            Wieso „doch“? Hatte das irgendwer ernsthaft bezweifelt, dass das geht?

                                            LLAP 🖖

                                            --
                                            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                                            1. Hi,

                                              Also gehts ja doch. Danke.

                                              Wieso „doch“? Hatte das irgendwer ernsthaft bezweifelt, dass das geht?

                                              da fehlt ein " außer pl" nach dem "irgendwer".

                                              cu,
                                              Andreas a/k/a MudGuard

                                              1. @@MudGuard

                                                Also gehts ja doch. Danke.

                                                Wieso „doch“? Hatte das irgendwer ernsthaft bezweifelt, dass das geht?

                                                da fehlt ein " außer pl" nach dem "irgendwer".

                                                Nö, den hatte ich durch das „ernsthaft“ schon wohlweislich ausgeschlossen. 😜

                                                LLAP 🖖

                                                --
                                                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                                        2. @@Matthias Apsel

                                          echo date("l, d.m.Y \K\W W/o", strtotime("01.01.2016"));
                                          
                                          // Freitag, 01.01.2016 KW 53/2015
                                          

                                          Huch? PHP kennt die Namen der Wochentage auf deutsch? Wie hast du das hinbekommen?

                                          LLAP 🖖

                                          --
                                          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                                          1. Hallo Gunnar Bittersmann,

                                            echo date("l, d.m.Y \K\W W/o", strtotime("01.01.2016"));
                                            
                                            // Freitag, 01.01.2016 KW 53/2015
                                            

                                            Huch? PHP kennt die Namen der Wochentage auf deutsch? Wie hast du das hinbekommen?

                                            das war nicht PHP. 😝

                                            Bis demnächst
                                            Matthias

                                            --
                                            Rosen sind rot.
                                          2. @@Gunnar Bittersmann

                                            echo date("l, d.m.Y \K\W W/o", strtotime("01.01.2016"));
                                            
                                            // Freitag, 01.01.2016 KW 53/2015
                                            

                                            Huch? PHP kennt die Namen der Wochentage auf deutsch? Wie hast du das hinbekommen?

                                            So geht’s aber:

                                            setlocale (LC_ALL, 'de_DE');
                                            
                                            echo strftime("%A, %d.%m.%Y KW %V/%G", strtotime("01.01.2016"));
                                            

                                            Doku sagt: „Um Datumsangaben in anderen Sprachen auszugeben, sollten Sie die Funktionen setlocale() und strftime() statt date() verwendet werden.“

                                            LLAP 🖖

                                            PS: Und was muss man nun als Locale angeben, damit für den 02.01.2016 „Sonnabend“ ausgegeben wird, nicht „Samstag“?

                                            --
                                            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                                            1. @@Gunnar Bittersmann

                                              PS: Und was muss man nun als Locale angeben, damit für den 02.01.2016 „Sonnabend“ ausgegeben wird, nicht „Samstag“?

                                              Zumindest das geht:

                                              setlocale (LC_ALL, 'de_DE');
                                              echo strftime("%A, %e. %B %Y KW %V/%G", strtotime("01.01.2016"));
                                              
                                              // Freitag, 1. Januar 2016 KW 53/2015
                                              
                                              setlocale (LC_ALL, 'de_AT');
                                              echo strftime("%A, %e. %B %Y KW %V/%G", strtotime("01.01.2016"));
                                              
                                              // Freitag, 1. Jänner 2016 KW 53/2015
                                              

                                              LLAP 🖖

                                              --
                                              “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                                            2. PS: Und was muss man nun als Locale angeben, damit für den 02.01.2016 „Sonnabend“ ausgegeben wird, nicht „Samstag“?

                                              de_DE-MV vielleicht? Ich würde allerdings nicht erwarten, dass sowas implementiert ist.

                                            3. Hi,

                                              setlocale (LC_ALL, 'de_DE');
                                              
                                              echo strftime("%A, %d.%m.%Y KW %V/%G", strtotime("01.01.2016"));
                                              

                                              PS: Und was muss man nun als Locale angeben, damit für den 02.01.2016 „Sonnabend“ ausgegeben wird, nicht „Samstag“?

                                              'de_SP' (saupreißisch)?

                                              cu,
                                              Andreas a/k/a MudGuard

                                          3. Tach!

                                            Huch? PHP kennt die Namen der Wochentage auf deutsch? Wie hast du das hinbekommen?

                                            "To format dates in other languages, you should use the setlocale() and strftime() functions instead of date()." sagt die Handbuchseite zu date().

                                            dedlfix.

                                          4. Huch? PHP kennt die Namen der Wochentage auf deutsch? Wie hast du das hinbekommen?

                                            date kann es nicht, aber strftime, da redet man dann aber quasi direkt mit der zuständigen C-Lib.

              2. Tach!

                Ich brauche den Rechenweg, der mich aus {$jahr}W52 zielsicher in die 1 Woche des nachfolgenden Jahres bringt und dachte an +1 week + 3day oder +10day.

                Der erste Wochentag des Folgejahres ist sinngemäß {$jahr + 1}W01. Bedenke dabei, dass das nicht zwangsläufig die nachfolgende Woche von {$jahr}W52 ist, denn manchmal gibt es auch {$jahr}W53.

                dedlfix.

                1. Hi dedlfix,

                  Der erste Wochentag des Folgejahres ist sinngemäß {$jahr + 1}W01. Bedenke dabei, dass das nicht zwangsläufig die nachfolgende Woche von {$jahr}W52 ist, denn manchmal gibt es auch {$jahr}W53.

                  Es geht um den "next-button" eines fortlaufenden Kalenders. Daher greift Deine Lösung nicht.

                  Pit

                  1. Tach!

                    Der erste Wochentag des Folgejahres ist sinngemäß {$jahr + 1}W01. Bedenke dabei, dass das nicht zwangsläufig die nachfolgende Woche von {$jahr}W52 ist, denn manchmal gibt es auch {$jahr}W53.

                    Es geht um den "next-button" eines fortlaufenden Kalenders.

                    Also das ist deine eigentliche Aufgabenstellung. Sag das doch gleich. Die nächste Woche ist immer 7 Tage vom Montag der vorherigen Woche entfernt. Da solltest du mit Tagen auf das Datum rechnen, nicht mit Wochennummern, von denen du nicht weißt, und auch nicht einfach über date() ermitteln kannst, wieviele es im Jahr gibt. Wenn du die Nummer brauchst, berechne sie rückwärts aus dem Datum mittels date() und passendem Format-Zeichen.

                    Daher greift Deine Lösung nicht.

                    Die greift schon, aber auf die ungenaue Aufgabenbeschreibung.

                    dedlfix.

                    1. Hallo dedlfix,

                      Die nächste Woche ist immer 7 Tage vom Montag der vorherigen Woche entfernt.

                      Um die gehts aber auch nicht, es geht ums nächste Jahr und das erhältst Du zielsicher (entweder auf Deine Methode, danke hierfür) oder, wenn Du in Wochen rechnest und der Kalender für Deutschland gilt, über +10day. $jahr."W".$kalenderwoche erledigt dann das Rückstellen auf den Montag dieser Woche.

                      Pit

                      1. Tach!

                        Die nächste Woche ist immer 7 Tage vom Montag der vorherigen Woche entfernt.

                        Um die gehts aber auch nicht, es geht ums nächste Jahr

                        Auch beim Übergang zwischen den Jahren gilt diese Regel.

                        oder, wenn Du in Wochen rechnest und der Kalender für Deutschland gilt, über +10day. $jahr."W".$kalenderwoche erledigt dann das Rückstellen auf den Montag dieser Woche.

                        Falls das zuverlässig funktioniert, ist das keine Lösung, die ich nehmen würde, weil sie zu undurchsichtig ist. Das rechnet über Bande statt geradeaus die Lösung zu ermitteln. Das verstehst du selbst in spätestens einem halben Jahr nicht mehr, falls du das nicht dokumentierst.

                        dedlfix.

                        1. Hi dedlfix,

                          Falls das zuverlässig funktioniert, ist das keine Lösung, die ich nehmen würde, weil sie zu undurchsichtig ist. Das rechnet über Bande statt geradeaus die Lösung zu ermitteln. Das verstehst du selbst in spätestens einem halben Jahr nicht mehr, falls du das nicht dokumentierst.

                          In meinem Gesamtcode macht sich dieser sehr gut, aber hast recht, ich schieb nen 3-zeiler als Kommentar drüber.

                          Pit

                          1. @@Pit

                            Falls das zuverlässig funktioniert, ist das keine Lösung, die ich nehmen würde, weil sie zu undurchsichtig ist. Das rechnet über Bande statt geradeaus die Lösung zu ermitteln. Das verstehst du selbst in spätestens einem halben Jahr nicht mehr, falls du das nicht dokumentierst.

                            In meinem Gesamtcode macht sich dieser sehr gut, aber hast recht, ich schieb nen 3-zeiler als Kommentar drüber.

                            “Good code is its own best documentation. As you’re about to add a comment, ask yourself, ‘How can I improve the code so that this comment isn’t needed?’ Improve the code and then document it to make it even clearer.” —Steve McConnell

                            “W​henever I have to think to understand what the code is doing, I ask myself if I can refactor the code to make that understanding more immediately apparent.” —Martin Fowler

                            Quelle: Internet ;-) @codewisdom

                            LLAP 🖖

                            --
                            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                        2. @@dedlfix

                          Das verstehst du selbst in spätestens einem halben Jahr nicht mehr, falls du das nicht dokumentierst.

                          “Any code of your own that you haven’t looked at for six or more months might as well have been written by someone else.” —Eagleson’s law

                          LLAP 🖖

                          --
                          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
  2. Hi,

    
    $jahr=2017;
    $kalenderwoche = 52;
    $relevantes_datum = $jahr."W".$kalenderwoche;
    $erg = date('Y', strtotime($relevantes_datum." +1 week"));
    
    echo $erg; // 2018
    
    
    $jahr=2018;
    $kalenderwoche = 52;
    $relevantes_datum = $jahr."W".$kalenderwoche;
    $erg = date('Y', strtotime($relevantes_datum." +1 week"));
    
    echo $erg; // 2018
    

    Und wie komme ich auf 2019?

    $erg = 2019; 😉

    welche Locale ist eingestellt? Nach US-Rechnung hat 2019 53 Wochen, nach D-Rechnung hat 2019 52 Wochen.

    cu,
    Andreas a/k/a MudGuard

    1. Hallo MudGuard,

      welche Locale ist eingestellt? Nach US-Rechnung hat 2019 53 Wochen, nach D-Rechnung hat 2019 52 Wochen.

      Ergänzung: In Deutschland ist die erste Kalenderwoche (des Jahres), die, die den ersten Donnerstag (des Jahres) enthält (Festlegung nach ISO irgendwas). In den USA (und auch anderen Ländern) beginnt die erste Kalenderwoche mit dem 1. Januar. Ist dies zum Beispiel ein Freitag, so enthält die erste Kalenderwoche nur 2 Tage, weil am Sonntag schon die zweite Kalenderwoche beginnt.

      Das wäre doch mal ein nettes Spielfeld für @pl.

      Bis demnächst
      Matthias

      --
      Rosen sind rot.
      1. Ergänzung: In Deutschland ist die erste Kalenderwoche (des Jahres), die, die den ersten Donnerstag (des Jahres) enthält (Festlegung nach ISO irgendwas). In den USA (und auch anderen Ländern) beginnt die erste Kalenderwoche mit dem 1. Januar. Ist dies zum Beispiel ein Freitag, so enthält die erste Kalenderwoche nur 2 Tage, weil am Sonntag schon die zweite Kalenderwoche beginnt.

        Schöne Erklärung. Aber für 2019 wäre das doch völlig identisch. Der 1.1.19 ist der Dienstag, der Donnerstag ist also der 3.1.19. Insofern wäre doch die erste KW in 2019 in beiden Ländern identisch.

        Pit

        1. Hallo Pit,

          Schöne Erklärung. Aber für 2019 wäre das doch völlig identisch. Der 1.1.19 ist der Dienstag, der Donnerstag ist also der 3.1.19. Insofern wäre doch die erste KW in 2019 in beiden Ländern identisch.

          Nein. Die Kalenderwochen sind in diesen beiden Ländern niemals identisch, die eine beginnt Montag (immer), die andere Sonntag (meistens).

          |1.KW|Anfang|Ende |--| |US|1.1.2019 (Di)|5.1.2019 (Sa) |DE|31.12.2018 (Mo)|6.1.2019 (So)

          Bis demnächst
          Matthias

          --
          Rosen sind rot.
        2. Hi,

          Schöne Erklärung. Aber für 2019 wäre das doch völlig identisch. Der 1.1.19 ist der Dienstag, der Donnerstag ist also der 3.1.19. Insofern wäre doch die erste KW in 2019 in beiden Ländern identisch.

          Du bist aber nicht vom 1.1. ausgegangen, sondern von der 52. Kalenderwoche des Vorjahres. Und wenn das Vorjahr in den USA 53 Wochen hat …

          cu,
          Andreas a/k/a MudGuard

          1. Hallo MudGuard,

            Du bist aber nicht vom 1.1. ausgegangen, sondern von der 52. Kalenderwoche des Vorjahres. Und wenn das Vorjahr in den USA 53 Wochen hat …

            … was es immer hat[1]

            Bis demnächst
            Matthias

            --
            Rosen sind rot.

            1. Manchmal sogar noch eine Woche mehr. ↩︎

    2. welche Locale ist eingestellt? Nach US-Rechnung hat 2019 53 Wochen, nach D-Rechnung hat 2019 52 Wochen.

      
      setlocale (LC_TIME,"de_DE");
      
      echo strftime("%B - ");
      
      setlocale (LC_TIME,"en_US");
      
      echo strftime("%B - ");
      
      setlocale (LC_TIME,"fr_FR");
      
      echo strftime("%B");
      

      Ergebnis:

      January - January - January
      

      Pit

    3. @@MudGuard

      welche Locale ist eingestellt?

      Welchen Einfluss sollte das haben? Interpretiert strtotime() das Argument '2017W52' nicht immer als ISO-8601-String?

      LLAP 🖖

      --
      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      1. Hallo Gunnar Bittersmann,

        welche Locale ist eingestellt?

        Welchen Einfluss sollte das haben? Interpretiert strtotime() das Argument '2017W52' nicht immer als ISO-8601-String?

        Auch in Ländern, in denen die Kalenderwoche nicht nach ISO-8601 festgelegt wird?

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
        1. @@Matthias Apsel

          welche Locale ist eingestellt?

          Welchen Einfluss sollte das haben? Interpretiert strtotime() das Argument '2017W52' nicht immer als ISO-8601-String?

          Auch in Ländern, in denen die Kalenderwoche nicht nach ISO-8601 festgelegt wird?

          ISO 8601 ist ISO 8601 ist ISO 8601.

          $locale = setlocale(LC_TIME, 'en_US');
          $date = strtotime('2016W01');
          echo date('c', $date); // 2016-01-04T00:00:00+01:00
          

          Das ist der Montag der 1. Kalenderwoche 2016 gemäß ISO 8601.

          LLAP 🖖

          --
          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
  3. Hallo,

    wenn ich deinen Code ausführe komme ich 2 x 2018 zurück.

    1. Hi,

      wenn ich deinen Code ausführe komme ich 2 x 2018 zurück.

      Welche Locale ist eingestellt? Vermutlich eine andere als bei Pit.

      cu,
      Andreas a/k/a MudGuard

      1. Hallo,

        Welche Locale ist eingestellt? Vermutlich eine andere als bei Pit.

        kann ich dir nicht sagen. Hab nur eine PHP Datei angelegt, seinen Code rein kopiert, hochgeladen und danach aufgerufen 😉

    2. Hallo Bernd,

      wenn ich deinen Code ausführe komme ich 2 x 2018 zurück.

      Nichts anderes wird behauptet. 😝

      Bis demnächst
      Matthias

      --
      Rosen sind rot.