Hugo Egon Balder: Anfängerfrage zu Datums- u. Zeitfunktionen

Hallo Forum!

Ich arbeite laut phpinfo() mit der Version 5.3.8.

Sollte nicht eine Ressource mit folgendem Code eine Warnung, dass keine Zeitzone gesetzt ist, ausgeben?

<?php  
 header("content-type:text/html;charset=utf-8");  
 error_reporting(E_ALL|E_STRICT);  
?>

[Hier stehen Header und Beginn des Bodys ...]

<?php  
  echo date("l");  
  echo date("H:i");  
?>

Das erzeugt bei mir aber _keine_ Warnung sondern führt zur Ausgabe von "Wednesday" und "11:58".

Woran kann es liegen, dass die erwartete Warnung nicht ausgegeben wird?

MfG

Hugo Egon Balder

  1. Hallo,

    Sollte nicht eine Ressource mit folgendem Code eine Warnung, dass keine Zeitzone gesetzt ist, ausgeben?

    warum sollte sie?

    <?php

    header("content-type:text/html;charset=utf-8");
    error_reporting(E_ALL|E_STRICT);
    ?>

    
    >   
    > [Hier stehen Header und Beginn des Bodys ...]  
    >   
    > ~~~php
    
    <?php  
    
    >   echo date("l");  
    >   echo date("H:i");  
    > ?>
    
    

    Das PHP-Manual sagt dazu nur:

    "Every call to a date/time function will generate a E_NOTICE if the time zone is not valid, and/or a E_STRICT or E_WARNING message if using the system settings or the TZ environment variable."

    Gehen wir also davon aus, dass für das auf dem Server laufende eine gültige Zeitzone voreingestellt ist, dann ist doch alles in Ordnung. Und das ist vermutlich in der php.ini geschehen.

    So long,
     Martin

    --
    F: Wer waren die ersten modernen Politiker?
    A: Die Heiligen drei Könige. Sie legten die Arbeit nieder, zogen teure Klamotten an und gingen auf Reisen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo Martin!

      Danke für Deine Antwort!

      Gehen wir also davon aus, dass für das auf dem Server laufende eine gültige Zeitzone voreingestellt ist, dann ist doch alles in Ordnung. Und das ist vermutlich in der php.ini geschehen.

      Also wenn ich phpinfo() laufen lasse, dann finde ich unter all den Einstellungen beim Punkt "date" Folgendes:

      date.timezone : Europe/Berlin (Und das sowohl als Local Value, als auch als Master Value)

      OK, könnte es dann sein, dass mein Provider in einer vorgehenden PHP Version keine Standard-Zeitzone bestimmt hat und ich _deshalb_ die Ausgabe einer Warnung, wenn ich selbst keine gesetzt habe, gewohnt bin?

      MfG

      Hugo Egon Balder

      1. Hallo Forum!

        Es gibt einen weiteren grundsätzlichen Punkt, den ich nicht verstehe.

        Auf _jeder_ der vielen Seiten, die ich zu diesem Thema bis jetzt gefunden habe, wird die time() Funktion benutzt. Also zB.

        <?php  
          $timestamp=time();  
          $datum=date("d.m.Y - H:i",$timestamp);  
          echo $datum;  
        ?>
        

        Jetzt funktionierrt das aber auch _ohne_ time().

        <?php  
          echo date("l");  
          echo date("H:i");  
        ?>
        

        Das erzeugt, wie schon geschrieben, "Wednesday" und "11:58". Ich weiß, dass time() den Unix-Timestamp ermittelt. Aber wozu brauche ich das für die Ausgabe von Datum oder Uhrzeit, wenn es auch _ohne_ time() funktioniert? Bzw. wo liegt der Unterschied, ob man es mit oder ohne time() macht? Mir ist das nicht wirklich klar.

        MfG

        Hugo Egon Balder

        1. Hallo,

          Auf _jeder_ der vielen Seiten, die ich zu diesem Thema bis jetzt gefunden habe, wird die time() Funktion benutzt. Also zB.

          <?php

          $timestamp=time();
            $datum=date("d.m.Y - H:i",$timestamp);
            echo $datum;
          ?>

            
          ja, das ist sozusagen "über"-korrekt.  
            
          
          > Jetzt funktionierrt das aber auch \_ohne\_ `time()`{:.language-php}.  
          >   
          > ~~~php
          
          <?php  
          
          >   echo date("l");  
          >   echo date("H:i");  
          > ?>
          
          

          In der Beschreibung der Funktion date() heißt es:

          "Returns a string formatted according to the given format string using the given integer timestamp or the current time if no timestamp is given. In other words, timestamp is optional and defaults to the value of time()."

          Mit anderen Worten: Du kannst einen *beliebigen* Timestamp als zweiten Parametr mitgeben, etwa gestern mittag 12 Uhr, dann arbeitet date() damit. Du kannst den zweiten Parameter auch weglassen, dann nimmt date() die aktuelle Systemzeit an.
          Was dein erstes Beispiel zeigt, ist also unnötig explizit: Erst die aktuelle Systemzeit ermitteln, und sie dann als optionalen zweiten Parameter am date() übergeben - um dasselbe zu erreichen, als wenn man ihn weglassen würde.

          Bzw. wo liegt der Unterschied, ob man es mit oder ohne time() macht? Mir ist das nicht wirklich klar.

          Der Unterschied ist, dass date() eben nicht nur eine formatierte Ausgabe des aktuellen Zeitpunkts erzeugen kann, sondern jedes beliebigen Zeitpunkts. Hast du beispielsweise die Zeit der letzten Änderung bestimmter Werte in einer DB gespeichert und willst diese Zeit wieder anzeigen, dann *musst* du date() den zweiten Parameter mitgeben.

          Schönes Wochenende,
           Martin

          --
          Wieso heißen die Dinger eigentlich Anrufbeantworter? Eigentlich sind es doch nur Anrufanhörer.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hallo Martin!

            Danke für Deine Erklärung! Ich denke, ich hab's verstanden und werde time() ab jetzt nur noch nutzen, wenn es nötig ist.

            Noch einen schönen Sonntag Nachmittag!

            MfG

            Hugo Egon Balder

  2. مرحبا

    Woran kann es liegen, dass die erwartete Warnung nicht ausgegeben wird?

    Du kannst mit date_default_timezone_get prüfen, ob eine Zeitzone gesetzt ist.

    Wenn man nichts angibt, ist es hier UTC.
    Wenn man sie Explizit setzt, wird UTC überschrieben.

    mfg