Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt]Zeitkonvertierung - Danke an hausl & nikosch

Einklappen

Neue Werbung 2019

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

  • [Erledigt]Zeitkonvertierung - Danke an hausl & nikosch

    Hallo, ich habe heute ein Problem mit der Zeit..

    Und zwar habe ich in einer CSV ein Datum in folgendem Format: 2013-W41
    Das "W" steht für Woche.. D.h. die 41. Woche aus dem Jahr 2013 steht da..

    Das würde ich jetzt gerne so umwandeln, dass ich das Datum vom Montag aus der Woche bekomme.. Also z.b. aus "2013-W41" "2013-11-04" (Das stimmt jetzt nicht, dient nur zur Veranschaulichung..)

    Das auslesen aus der CSV ist eine andere Baustelle, die ich schon erfolgreich fertiggestellt habe - hier gehts jetzt nur um das Konvertieren..

    Es gibt ja so nette Funktionen wie "strtotime" und "date",
    aber damit hab ichs bisher nicht hinbekommen..

    Hier mal mein bisheriger Code (nur eine testdatei):
    PHP-Code:
    <?php
    $datum 
    "2013-W48";
    $datum2 "17.11.2013";
    $datum3 date(Y);

    // Normales Datum in Datenbankdatum umwandeln
    $fields1 explode ('.'$datum2);
    print_r ($fields1[0].'<br>');
    print_r ($fields1[1].'<br>');
    print_r ($fields1[2].'<br>');

    print_r ('<br>');

    $dbdate1 $fields1[2].'-'.$fields1[1].'-'.$fields1[0];
    print_r ($dbdate1);

    print_r("<br><br><br>");
    // Crazy Datum in Datenbankdatum umwandeln
    $fields2 explode ('-'$datum);
    print_r ($fields2[0].'<br>');
    print_r ($fields2[1].'<br>');

    //$wzahl = str_split($fields[1]);
    $a str_replace("W","",$fields2[1]);

    echo 
    "|".$a."|";

    print_r ('<br>');

    $dbdate2 strtotime($a." week ".$datum3);
    $woah date("Y-m-d H:i:s",$dbdate2);
    echo 
    $woah;


    echo 
    "<br>".date("Y-m-d H:i:s",strtotime("01 January ".$datum3." +".$a." week"));
    echo 
    "<br>".date("Y-m-d H:i:s",strtotime("first day of ".$datum3));
    ?>

  • #2
    http://php.net/manual/en/datetime.createfromformat.php

    // EDIT.. moment mal.. scheinbar kennt das W nicht, im Gegensatz zu date().
    The string "()()" is not palindrom but the String "())(" is.

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

    Kommentar


    • #3
      Problem ist halt, dass
      Und zwar habe ich in einer CSV ein Datum in folgendem Format: 2013-W41
      nicht stimmt. Eine Woche ist eine Woche, kein Datum. Folglich kannst Du auch keinen Datumsstempel daraus gewinnen.

      Btw. komisches Format, Dir ist schon klar, dass die KW1 auch ins alte Jahr fallen kann und die letzte ins nächste Jahr?


      Kalenderwoche KW 52, 2003: „2003-W52“ – Montag, 22. Dezember 2003 bis Sonntag, 28. Dezember 2003
      Kalenderwoche KW 1, 2004: „2004-W01“ – Montag, 29. Dezember 2003 bis Sonntag, 4. Januar 2004
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        So könntest du ev. hinkommen

        http://php.net/manual/de/datetime.setisodate.php

        PHP-Code:
        $date date_create();
        date_isodate_set($date201345); // Jahr und KW
        echo date_format($date'Y-m-d'); // 2013-11-04 
        Den Eingangsstring zerstückeln darfst selber.
        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


        • #5
          kann man das denn nicht durch irgendeine trickreiche rechnung hinkriegen?
          und ja, das ist mir klar - geht nur darum einen Montag zu haben^^

          @hausl: jetz hab ich dirschon 2x zu danken.

          Kommentar


          • #6
            @nikosch.. Funktion scheint soweit richtig zu arbeiten

            PHP-Code:
            function mondayOfWeek($year$week$format='Y-m-d') {
                
            $date date_create(); 
                
            date_isodate_set($date$year$week);
                return 
            date_format($date$format);
            }

            echo 
            mondayOfWeek(201345); // 2013-11-04
            echo mondayOfWeek(200352); // 2003-12-22
            echo mondayOfWeek(200401); // 2003-12-29 
            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


            • #7
              Dann sollte man auch nix eigenes versuchen zu erfinden.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Eigene Erfindungen sind ja ganz cool - aber das von hausl funktioniert einwandfrei!

                Danke an euch - hier findet man wirklich bei jedem Problem eine Lösung!

                Kommentar


                • #9
                  Nicht das Timezone Setting vergessen!
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #10
                    Zitat von .PolluX Beitrag anzeigen
                    Und zwar habe ich in einer CSV ein Datum in folgendem Format: 2013-W41
                    Das "W" steht für Woche.. D.h. die 41. Woche aus dem Jahr 2013 steht da..
                    Auch auf die Gefahr hin jetzt als Klugsch./Spielverderber beschimpft zu werden, aber '2013-W41' ist schon ein Format , welches von DateTime erkannt wird:
                    PHP-Code:
                    $date date_create('2013-W41');
                     
                    //$date: object(DateTime)#1 (3) { ["date"]=> string(19) "2013-10-07 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" } 
                    LG jspit

                    Kommentar


                    • #11
                      Um hier nochmal ergänzend etwas hinzuzufügen, falls sich jemand hierher verirrt..
                      Die Funktion "date_create" verursacht bei mir eine Fehlermeldung:
                      Code:
                      Catchable fatal error: Object of class DateTime could not be converted to string in C:\apachefriends\xampp\htdocs\tool\import_test.php on line 28
                      Die Funktion get_monday_of_week hingegen funktioniert hier Einwandfrei:
                      PHP-Code:
                      function get_monday_of_week($kw,$year false) {
                          if (
                      $year == false$year date("Y");
                          if (
                      $kw || $kw 53) return false;
                          
                      $dayofweek = (intval(date("w",mktime(0,0,0,1,1,$year))) == 0) ? intval(date("w",mktime(0,0,0,1,1,$year)));
                          
                      $dayofyear 7*($kw-2)+(9-$dayofweek);
                          
                      $days      0;
                          
                      $i           1
                          while (
                      true) {
                              if (
                      $days+date('t',mktime(0,0,0,$i,1,$year)) < $dayofyear$days += date('t',mktime(0,0,0,$i++,1,$year));
                              else return 
                      $datum = (($dayofyear-$days 1) ? : ($dayofyear-$days)).".".($i).".$year";
                          }

                      Hier noch ein kleines Anwendungsbeispiel von mir:
                      PHP-Code:
                      $var "2014-W35";
                      $ex explode("-"$var);

                      $test explode("W"$ex[1]);

                      $woche $test[1];

                      $j $ex[0];
                      $kw $woche;

                      echo 
                      "Die Kalenderwoche ".$kw." des Jahres ".$j." beginnt am Montag, dem ".get_monday_of_week($kw,$j); 
                      Welches wiederum folgendes Ausgibt:
                      Die Kalenderwoche 35 des Jahres 2014 beginnt am Montag, dem 25.8.2014

                      Kommentar


                      • #12
                        Die Funktion "date_create" verursacht bei mir eine Fehlermeldung:
                        Code:
                        Catchable fatal error: Object of class DateTime could not be converted to string ...
                        Naja, weil du ein (Datums-)Objekt nicht wie einen String einfach rausschreiben kannst...

                        Ist sonst fast ein 2-Zeiler:

                        PHP-Code:
                        $date date_create('2014-W35'); 
                        echo 
                        date_format($date'Y-m-d');
                        // 2014-08-25 
                        LG
                        The string "()()" is not palindrom but the String "())(" is.

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

                        Kommentar

                        Lädt...
                        X