Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit der Zeitberechnung DateTime()

Einklappen

Neue Werbung 2019

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

  • Problem mit der Zeitberechnung DateTime()

    Hallo leute,
    ich habe jetzt schon hin und her probiert, aber ich kann einfach keine Minuten ausgeben bei der Berechnung von Zeitabständen. Tage zeigt er mir über "->days" an, aber wenn ich es mit "->mins" oder "->minutes" probiere, sowie andere Angaben bekomm ich gar nichts angezeigt. Mithilfe von "->format('i')" bekomm ich den inhalt der Klammern dargestellt.

    Aber erstmal zu meinem Ziel:
    Ich habe in einer Datei ein Datum mit Uhrzeit zu stehen, dieses soll ausgelesen werden und von der aktuellen Zeit abgezogen werden, um den Zeitunterschied zu ermitteln.

    mein Code:
    PHP-Code:
    $datei file('blabla/link/bla.txt');

    $var $datei[14];

    $vard substr($var,62);
    $varm substr($var,32);
    $vary substr($var,02);
    $varh substr($var,92);
    $varmi substr($var,122); 


    $vardatetime = new DateTime($vary.'-'.$varm.'-'.$vard.'-'.$varh.'-'.$varmi);
    $vardatetime2 = new DateTime();
    $varinterval $vardatetime2->diff($vardatetime);
    echo 
    $varinterval->days
    Wie gesagt, ich hätte gern den Zeitinterval in Minuten, nur gibt er mir die nicht aus.
    Ein Beispielcode aus dem Manual funktioniert zwar mit "->format()", aber dieses hat ein festes Datum im Code, meins soll vorher ausgelesen werden. Hab ich irgendwo einen Fehler drin?^^

    mfG
    Gortun


  • #2
    Hast du mal in der Doku geschaut welche Attribute das Objekt hat?
    DateInterval {
    /* Eigenschaften */
    public integer $y ;
    public integer $m ;
    public integer $d ;
    public integer $h ;
    public integer $i ;
    public integer $s ;
    public integer $invert ;
    public mixed $days ;

    /* Methoden */
    public __construct ( string $interval_spec )
    public static DateInterval createFromDateString ( string $time )
    public string format ( string $format )
    }
    Wie sieht dein Ansatz mit format() aus?

    Kommentar


    • #3
      PHP-Code:
      echo $varinterval->format('y-m-d-H-i'); 
      die Ausgabe ist: y-m-d-H-i

      im Beispielcode vom Manual funktioniert die Ausgabe richtig

      Beispielcode
      PHP-Code:
      <?php
      $date 
      = new DateTime('2000-01-01');
      echo 
      $date->format('Y-m-d H:i:s');
      ?>

      Kommentar


      • #4
        der Format-Specifier ist nicht ganz so liberal wie php sonst ...

        Manual -> Y
        du -> y

        ?? vermutlich wird die Ausgabe dort schon abgebrochen - weswegen du die Formatstrings statt der Inhalte bekommst
        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

        Kommentar


        • #5
          Auch wenn ich nur das Jahr via format('Y') ausgeben möchte, wird der Inahlt der Klammern ausgegeben. In dem Falle ein großes Y.

          Manchmal fühle ich mich von PHP gedisst xD

          Kommentar


          • #6
            Die Formatangaben sind für jeden Typ ein wenig anders. Für Dateinterval wird immer ein % davor erwartet:
            PHP-Code:
            $varinterval->format('%y-%m-%d-%H-%i-%s'); 
            s. DateInterval::format

            Und mit - zwischen den Zeitangaben bekommst du auch keine richtige Zeit,
            lass dir mal dein $vardatetime mit var_dump ausgeben.
            PHP-Klassen auf github

            Kommentar


            • #7
              Vielen Dank, das Problem ist gelöst

              Wichtig ist aber noch die Konstruktion der Zeit. Datum mit '-' trennen, Zeit mit ':' und zwischen Zeit und Datum ein Leerzeichen ' '. Sonst gibt er die aktuelle Zeit aus.

              Der richtige Code sieht so aus:

              PHP-Code:
              $datei file('blaaablaabla/link/bla.txt');

              $var $datei[14];

              $vard substr($var,62);
              $varm substr($var,32);
              $vary substr($var,02);
              $varh substr($var,92);
              $varmi substr($var,122); 


              $vardatetime = new DateTime($vary.'-'.$varm.'-'.$vard.' '.$varh.':'.$varmi);
              $vardatetime2 = new DateTime();
              $varinterval $vardatetime2->diff($vardatetime);
              echo 
              $varinterval->format('%i'); 
              Vielen Dank für eure Hilfen

              Kommentar

              Lädt...
              X