Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit mktime

Einklappen

Neue Werbung 2019

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

  • Problem mit mktime

    Hallo,

    hab da mal eine Frage:
    Ich habe eine Datenbanktabelle(Feiertage) mit der Spalte datum(date) und Bezeichnung. Nun lese ich die Tabelle aus und möchte anhand des Datums den Wochentag bestimmen.
    für das Jahr 2017 passt alles, jedoch für 2018 und 2019 stimmen die Tage nicht. Woran kann das liegen?
    2017 ist der 01.01.2017 ein So
    2018 ist der 01.01.2018 ein Mo
    2019 ist der 01.01.2019 ein Di

    Laut Script ist 2017 (w aus mktime = 0) richtig, aber für 2018 und 2019 kommt Mi (w aus mktime = 3), was nicht stimmt.

    PHP-Code:
    $tagd[0] = "SO";
    $tagd[1] = "MO";
    $tagd[2] = "DI";
    $tagd[3] = "MI";
    $tagd[4] = "DO";
    $tagd[5] = "FR";
    $tagd[6] = "SA";

    foreach(
    $sql as $row) {
        
    $datum htmlspecialchars($row['datum']);
        
    $bez htmlspecialchars($row['bezeichnung']);

        
    $array explode("-",$datum);                                                                            

        
    $TagKurz $tagd[date("w",mktime(0,0,0,$array[0],$array[1],$array[2]))];

        echo 
    $TagKurz." ".$datum."<br>";

    Gruß
    Falke07

  • #2
    Mach mal ein var_dump von dein $datum und schau dir die Reihenfolge der Parameter für mktime an.
    Schicker ist es auch mit DateTime zu arbeiten..

    Kommentar


    • #3
      Du brauchst das Datum aus der DB nicht aufsplitten, DateTime kann von der Stange damit umgehen. https://php-de.github.io/jumpto/date...deutsche-namen

      Du hast nur eine Fehlerquelle mehr.

      PHP-Code:
      $aWeekdayNamesDE = [
          
      'Sonntag''Montag''Dienstag''Mittwoch''Donnerstag''Freitag''Samstag'
      ];

      foreach(
      $sql as $row) {
          
      $dt = new DateTime($datum);
          echo 
      $aWeekdayNamesDE[$dt->format('w')];

      Und bitte htmlspecialchars ERST bei der Ausgabe, nicht schon zuvor.
      The string "()()" is not palindrom but the String "())(" is.

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

      Kommentar


      • #4
        Ups,

        wer lesen kann ist im Vorteil. Nun passt es.

        THx

        Falke07

        Kommentar


        • #5
          THx hausl,
          hab wieder was dazugelernt.

          SL
          Falke07

          Kommentar


          • #6
            [QUOTE=Falke07;n1529102]
            Ich habe eine Datenbanktabelle(Feiertage) mit der Spalte datum(date) und Bezeichnung./QUOTE]

            Feiertage in der Datenbank? Schau mal hier holiday-calendar.
            Und das Datum sollte nicht als String im Format dd.mm.YYYY in der Datenbank gespeichert werden., sondern als datetime oder timestamp.
            Edit: Hinfällig

            Alternativ zu #3:
            PHP-Code:
            $datum "2019-01-01";  //test
            echo dt::create($datum)->formatL('l d.m.Y','de');
            //Dienstag 01.01.2019 

            Kommentar


            • #7
              Zitat von jspit Beitrag anzeigen
              Und das Datum sollte nicht als String im Format dd.mm.YYYY in der Datenbank gespeichert werden.,
              Glaub das hat er nicht:
              PHP-Code:
              $array explode("-",$datum); 
              The string "()()" is not palindrom but the String "())(" is.

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

              Kommentar


              • #8
                Ich speicher das Datum schon als Typ date ab also 2019-01-20. Alles andere macht hier ja keinen Sinn.
                Der Fehler lag nur in der Reihenfolge von mktime. Hier habe ich nicht aufgepasst.

                Hab lieber meine eigene Tabelle mit den Feiertagen und bei den 12-13 Tagen in BW ist es ja auch kein Problem.

                Ansonsten gibt es wohl mehrere Lösungen für die Auflösung des Datums. THx für die Hilfe.

                SL
                Falke

                Kommentar


                • #9
                  Zitat von Falke07 Beitrag anzeigen
                  Ansonsten gibt es wohl mehrere Lösungen für die Auflösung des Datums.
                  So ist es. Siehe auch https://dev.mysql.com/doc/refman/5.5...tion_dayofweek

                  Kommentar


                  • #10
                    PHP-Code:
                    $dateFromDatabase '2019-01-01';
                    $date = new DateTime($dateFromDatabase);

                    $languages = ['de_DE''de_AT''en_GB''en_US''fr_FR''it_IT''es_ES''ja_JP'];

                    foreach (
                    $languages as $language) {
                        
                    $formatter = new IntlDateFormatter($languageIntlDateFormatter::FULLIntlDateFormatter::NONE);
                        echo 
                    $language ': ' $formatter->format($date) . PHP_EOL;

                    Ausgabe:
                    Code:
                    de_DE: Dienstag, 1. Januar 2019
                    de_AT: Dienstag, 01. Jänner 2019
                    en_GB: Tuesday, 1 January 2019
                    en_US: Tuesday, January 1, 2019
                    fr_FR: mardi 1 janvier 2019
                    it_IT: martedì 1 gennaio 2019
                    es_ES: martes, 1 de enero de 2019
                    ja_JP: 2019年1月1日火曜日

                    Kommentar


                    • #11
                      jspit Messier 1001 Ich hab die holiday-calendar Thematik hier herausgetrennt und dorthin verschoben: https://www.php.de/forum/php-de-inte...liday-calendar
                      The string "()()" is not palindrom but the String "())(" is.

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

                      Kommentar

                      Lädt...
                      X