Hugo Egon Balder: Die Funktionen time() und getdate()

Hi,

gehe ich Recht in der Annahme, dass die php-Funktion time(), die die seit Beginn der Unix-Epoche (1. Jänner 1970, 0 Uhr mitteleuropäische Zeit) bis jetzt vergangenen Sekunden ausgibt, dies auf das eingestellte Datum und die eingestellte Zeit _jenes_ Rechners bezieht, auf dem geparst wird?

Und ich glaube, ich verstehe nicht ganz den wirklichen Unterschied zwischen time() und getdate(). Verwenden diese 2 Funktionen verschiedene Quellen, auf grund derer sie die Ausgabe berechnen?

Wenn ich irgend welche Datums-/Zeit-Rechnungen, bei der das aktuelle Datum/die aktuelle Zeit eine Rolle spielt, vorliegen habe, soll dann time() oder getdate() der Ausgangspunkt des Codes sein?

Danke im Voraus!

MfG

Hugo Egon Balder

  1. gehe ich Recht in der Annahme, dass die php-Funktion time(), die die seit Beginn der Unix-Epoche (1. Jänner 1970, 0 Uhr mitteleuropäische Zeit) bis jetzt vergangenen Sekunden ausgibt, dies auf das eingestellte Datum und die eingestellte Zeit _jenes_ Rechners bezieht, auf dem geparst wird?

    ja - warum sollte die time()-funktion in diesen punkt von ALLEN anderen php-funktionen abweichen?

    Verwenden diese 2 Funktionen verschiedene Quellen, auf grund derer sie die Ausgabe berechnen?

    nein, die beiden funktionen tun etwas vollig anderes - lies die dokumentation nochmal aufmerksam durch

    1. Hi suit,

      Verwenden diese 2 Funktionen verschiedene Quellen, auf grund derer sie die Ausgabe berechnen?

      nein, die beiden funktionen tun etwas vollig anderes - lies die dokumentation nochmal aufmerksam durch

      ich _habe_ die Dokumentation beider Funktionen gelesen (nicht umsonst habe ich zu den entsprechenden 2 Seiten verlinkt) und _weil_ ich den Unterschied nicht verstanden habe, habe ich die Frage im Forum gepostet.

      Mir dann als Antwort zu geben, ich soll die Dokumentation nochmal lesen, ist mir keine große Hilfe.

      MfG

      Hugo Egon Balder

      1. ich _habe_ die Dokumentation beider Funktionen gelesen (nicht umsonst habe ich zu den entsprechenden 2 Seiten verlinkt) und _weil_ ich den Unterschied nicht verstanden habe, habe ich die Frage im Forum gepostet.

        Mir dann als Antwort zu geben, ich soll die Dokumentation nochmal lesen, ist mir keine große Hilfe.

        Wenn das stimmt was Du schreibst, fürchte ich, wird Dir keine Antwort die hier gegeben werden könnte weiterhelfen.

        Vielleicht erarbeitest Du Dir erst mal die Unterschiede von einigen Datentypen, z.B. von "int" und "array", und den Unterschied zwischen Übergabewert (Input) und Rückgabewert (Output) einer Funktion (Putput).

        Oder liegt es an den Unterschieden von Zeiteinheiten wie Sekunden, Minuten, Stunden, Tagen, Monaten und Jahren und den Unterschieden in der Zählweise von diesen Zeiteinheiten zum Dezimalsystem?

  2. Hi,

    gehe ich Recht in der Annahme, dass die php-Funktion time(), die die seit Beginn der Unix-Epoche (1. Jänner 1970, 0 Uhr mitteleuropäische Zeit) bis jetzt vergangenen Sekunden ausgibt, dies auf das eingestellte Datum und die eingestellte Zeit _jenes_ Rechners bezieht, auf dem geparst wird?

    naja, es wäre etwas unpraktisch, wenn PHP sich zur Ermittlung der Zeit mal kurz mit einem anderen Rechner verbinden und dessen Zeit ermitteln würde - wofür vermutlich die selbe Funktion aufgerufen würde, die dann hoffentlich nicht das gleiche macht.

    Und ich glaube, ich verstehe nicht ganz den wirklichen Unterschied zwischen time() und getdate(). Verwenden diese 2 Funktionen verschiedene Quellen, auf grund derer sie die Ausgabe berechnen?

    Nein, sie haben ein unterschiedliches Ausgabe-Format.

    Wenn ich irgend welche Datums-/Zeit-Rechnungen, bei der das aktuelle Datum/die aktuelle Zeit eine Rolle spielt, vorliegen habe, soll dann time() oder getdate() der Ausgangspunkt des Codes sein?

    Glasklare Antwort: Ja.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      Wenn ich irgend welche Datums-/Zeit-Rechnungen, bei der das aktuelle Datum/die aktuelle Zeit eine Rolle spielt, vorliegen habe, soll dann time() oder getdate() der Ausgangspunkt des Codes sein?

      Glasklare Antwort: Ja.

      Ich deute das jetzt als ein "Beides ist richtig, aber eines der beiden muß sein, egal, welches".

      MfG

      Hugo Egon Balder

      1. Hi,

        Glasklare Antwort: Ja.
        Ich deute das jetzt als ein "Beides ist richtig, aber eines der beiden muß sein, egal, welches".

        sagen wir: Beide Funktionen sind sehr gut für die allgemeine genannte Anforderung geeignet.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          sagen wir: Beide Funktionen sind sehr gut für die allgemeine genannte Anforderung geeignet.

          dann anders gefragt: Wenn ich im Zuge eines php-Programmteiles ein mal die aktuelle Zeit, ein mal das aktuelle Datum und in einem dritten Fall beides benötige. Mit welcher php-Funktion würdest Du

          1.) Das aktuelle Datum ==> ???

          2.) Die aktuelle Zeit ==> ???

          3.) Das aktuelle Datum _und_ die aktuelle Zeit ==> ???

          bekommen? Was ist für den jeweiligen Fall der kürzeste, eleganteste und meist verwendetste Weg?

          Leider weiß ich noch immer nicht den genauen Unterschied zwischen time() und getdate().

          MfG

          Hugo Egon Balder

          1. Hi,

            dann anders gefragt: Wenn ich im Zuge eines php-Programmteiles ein mal die aktuelle Zeit, ein mal das aktuelle Datum und in einem dritten Fall beides benötige. Mit welcher php-Funktion würdest Du

            1.) Das aktuelle Datum ==> ???

            2.) Die aktuelle Zeit ==> ???

            3.) Das aktuelle Datum _und_ die aktuelle Zeit ==> ???

            bekommen?

            Die Antwort lautet auch hier wieder: Mit beiden.

            Was ist für den jeweiligen Fall der kürzeste, eleganteste und meist verwendetste Weg?

            Auch hier kann die Antwort immer noch nur lauten: Kommt drauf an.

            Leider weiß ich noch immer nicht den genauen Unterschied zwischen time() und getdate().

            Ja warum denn bitte nicht?

            Im Manual erfaehrst du doch, was die beiden als Rueckgabewerte liefern.
            Die eine, time(), liefert einen Unix Timestamp - was das ist, darueber hast du dich doch informiert.
            Und die andere, getdate(), liefert ein Array mit Datumsbestandteilen, so wie ein Mensch im Gegensatz zum Computer den Begriff "Datum" eher versteht - bestehend aus einzelnen Komponenten wie Tag, Monat, Jahr und Stunde, Minute, Sekunde.

            Was bitte gibt es denn daran nicht zu begreifen, wenn man es im Manual nachliest?

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
    2. @@Cheatah:

      naja, es wäre etwas unpraktisch, wenn PHP sich zur Ermittlung der Zeit mal kurz mit einem anderen Rechner verbinden und dessen Zeit ermitteln würde

      Och, eigentlich wäre das sehr praktisch, nicht die Zeit von einer falschgehenden Uhr zu erhalten, sondern die richtige von einem anderen Rechner, der an einer Atomuhr hängt.

      Live long and prosper,
      Gunnar

      --
      Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
      1. Hi,

        Och, eigentlich wäre das sehr praktisch, nicht die Zeit von einer falschgehenden Uhr zu erhalten, sondern die richtige von einem anderen Rechner, der an einer Atomuhr hängt.

        es wäre aber unpraktisch, diese Zeit ausgerechnet dann (und immer dann) ermitteln zu müssen, wenn der Wert benötigt wird. Idealerweise passiert das regelmäßig, mit einem vernachlässigbaren Eigenfehler in der Zwischenzeit.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  3. Guten Tag,

    gehe ich Recht in der Annahme, dass die php-Funktion [time()](http://de.php.net
    /manual/de/function.time.php), die die seit Beginn der
    Unix-Epoche (1. Jänner 1970, 0 Uhr mitteleuropäische Zeit) bis jetzt
    vergangenen Sekunden ausgibt, dies auf das eingestellte Datum und die
    eingestellte Zeit _jenes_ Rechners bezieht, auf dem geparst wird?

    Nein. Der Beginn der Unix-Epoche war am 01. Januar 1970 um 00:00 UTC (auch bekannt als GMT, aber nun bitte keine Diskussion, ob UTC und GMT identisch sind), nicht MEZ/CET. time() liefert die Sekunden seit dieser Zeit zurück, getdate() liefert jedoch ein Array mit verschiedenen Werten zurück - eine Liste dieser findest du im Manual, wie du ja schon sicher bemerkt hast.

    PHP konvertiert allerdings die Anzeige, nicht die tatsächlich vergangenen Sekunden seit Beginn der Unix-Epoche, in die lokal von dir eingestellte Zeitzone. Mein Rechner steht in München und ist auf Europe/Berlin eingestellt (ein Alias für UTC +01:00):

    $ php -r "var_dump(date_default_timezone_get(), getdate());"  
    string(13) "Europe/Berlin"  
    array(11) {  
      ["seconds"]=>  
      int(4)  
      ["minutes"]=>  
      int(4)  
      ["hours"]=>  
      int(18)  
      ["mday"]=>  
      int(23)  
      ["wday"]=>  
      int(2)  
      ["mon"]=>  
      int(12)  
      ["year"]=>  
      int(2008)  
      ["yday"]=>  
      int(357)  
      ["weekday"]=>  
      string(7) "Tuesday"  
      ["month"]=>  
      string(8) "December"  
      [0]=>  
      int(1230051844)  
    }
    

    Setze ich die Zeitzone aber explizit auf UTC, ändert sich auch die Anzeige, jedoch nicht die Anzahl der vergangenen Sekunden seit Beginn der Unix-Epoche[0]:

    $ php -r "var_dump(date_default_timezone_set('UTC'), getdate());"  
    bool(true)  
    array(11) {  
      ["seconds"]=>  
      int(20)  
      ["minutes"]=>  
      int(4)  
      ["hours"]=>  
      int(17)  
      ["mday"]=>  
      int(23)  
      ["wday"]=>  
      int(2)  
      ["mon"]=>  
      int(12)  
      ["year"]=>  
      int(2008)  
      ["yday"]=>  
      int(357)  
      ["weekday"]=>  
      string(7) "Tuesday"  
      ["month"]=>  
      string(8) "December"  
      [0]=>  
      int(1230051860)  
    }  
    
    

    time() liefert jedoch nur die Anzahl der Sekunden seit Beginn der Unix-Epoche (einen sog. Timestamp), egal, welche Zeitzone eingestellt ist:

    $ php -r "var_dump(date_default_timezone_get(),time(),date_default_timezone_set('UTC'), time());"  
    string(13) "Europe/Berlin"  
    int(1230052434)  
    bool(true)  
    int(1230052434)
    

    Und ich glaube, ich verstehe nicht ganz den wirklichen Unterschied zwischen
    time() und
    getdate().
    Verwenden diese 2 Funktionen verschiedene Quellen, auf grund derer sie die
    Ausgabe berechnen?

    Nein. PHP beachtet nur bei der Datumsausgabe eine gesetzte Zeitzone. time() betrifft dies aber funktionsbedingt nicht.

    Wenn ich irgend welche Datums-/Zeit-Rechnungen, bei der das aktuelle
    Datum/die aktuelle Zeit eine Rolle spielt, vorliegen habe, soll dann
    time() oder
    getdate() der
    Ausgangspunkt des Codes sein?

    Die Zeitzone ist relevant, die Datumsinformationen basieren beide auf der Anzahl der Sekunden, die seit Beginn der Unix-Epoche vergangen sind.

    Lies am Besten mal ausführlich das Kapitel zu den Datums- und Zeitfunktionen im Manual durch und teste, teste, teste.

    [0] Die Abweichung ergibt sich daraus, dass ich die Befehle hinteinander ausführte. Sie ändert sich aber nicht so signifikant, als dass das Beispiel ad absurdum geführt würde.

    Gruß
    Christoph Jeschke

    --
    Zend Certified Engineer
    Certified Urchin Admin