Niko: Timestamp bzw. Sekunden vor 1970 - Zeitdifferenz!

Hallo,

ich möchte die Differenz in Sekunden zweier Daten berechnen - mein Problem ist nur, dass eines der Daten vor 1970 liegt, sogar manchmal vor 1800. Also klappt es nicht mit mktime().

So sieht es aus
$diff = time() - mktime(0, 0, 0, 12, 03, 1810);

Dann bekomme ich von mktime() einen Fehler.

Kann mir jemand sagen, wie ich das trotzdem berechnen kann - das Ergebnis benötige ich in Sekunden ...

Gruss, Niko

  1. Hallo Niko

    ich möchte die Differenz in Sekunden zweier Daten berechnen - mein Problem ist nur, dass eines der Daten vor 1970 liegt, sogar manchmal vor 1800. Also klappt es nicht mit mktime().

    In welcher Form liegen Deine Daten vor?

    Kann mir jemand sagen, wie ich das trotzdem berechnen kann - das Ergebnis benötige ich in Sekunden ...

    Wie genau benötigst Du die Differenz? Da Du angibst, dass z.T. Zeitangaben vor 1800 liegen, gehe ich davon aus, dass ein- bis zwei Stunden Abweichung, d.h. bis zu 7.200 Sekunden Abweichung kein Problem darstellen. Vor 1800 waren in weiten Bereichen lokale Zeiten gültig, d.h. es war 12.00 Uhr, wenn die Sonne am höchsten stand. Zumindest für die letzten beiden Jahrhunderte müsstest Du mit den diversen Sommerzeiten rechnen.

    Also: Wie liegen Deine Daten vor? Wie genau muss das Ergebnis sein.

    Tipp: Die Zählung der Julianischen Tage könnte Dir weiterhelfen, siehe auch http://www.php.net/manual/de/function.cal-to-jd.php. Damit kannst Du Datumsangaben seit dem 1.1.4713 vor Christus bis heute berechnen, siehe Kalenderfunktionen in PHP.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      Also: Wie liegen Deine Daten vor? Wie genau muss das Ergebnis sein.

      Die Daten liegen vor als Datum, z.B. 18.05.1890. D.h. ich benötige jetzt die Differenz bis heute, also time(), in Sekunden.

      Daaanke, Niko

      1. Hallo Niko

        Die Daten liegen vor als Datum, z.B. 18.05.1890. D.h. ich benötige jetzt die Differenz bis heute, also time(), in Sekunden.

        Du hast also nur eine Datumsangabe, keine Zeit.
        Sehr schön, dann gibt es auch keinen Anlass genauer zu rechnen als in Tagen.

        Rechne einfach die Anzahl der vergangenen Tage aus und multipliziere diese Anzahl mit 86400, d.h. der Anzahl Sekunden pro Tag.

        Für die Anzahl der vergangenen Tage nimmst Du die jeweilige Tageszahl in der Julianischen Zählweise. Siehe dazu im PHP-Handbuch unter Julian day count nach.

        Freundliche Grüße

        Vinzenz

      2. Hallo!

        als erstes musst du den String in einen UNIX Zeitstempel umwandeln:

        $erstesDatum=strtotime($variable);
        $zweitesDatum=getdate();
        $zweitesDatum=$zweitesDatum[0];

        und dann kannst du die beiden subtrahieren.

        Nico

        1. $erstesDatum=strtotime($variable);

          Das ergibt -1 bei '18.05.1890'. Und selbst wenn man es als '1890-05-18' angibt bleibt das so.

        2. Hallo Nico

          warum nutzt Du nicht einfach time()?

          Gruß aus Berlin!
          eddi

          1. Hallo Eddi

            Hallo Nico

            Bitte beachte den Unterschied in der Namensschreibweise. Dies ist nicht der OP, dieser hat in seinem Ausgangsposting bereits begründet, warum er mktime() nicht nutzen kann.

            warum nutzt Du nicht einfach time()?

            weil time() das gleiche Problem hat wie mktime(), die Unix-Epoche, mit der man so schlecht auf den 18.05.1805 zurückrechnen kann ;-)

            Freundliche Grüße

            Vinzenz

            1. Hallo  Vinzenz,

              Hallo Nico
              Bitte beachte den Unterschied in der Namensschreibweise. Dies ist nicht der OP, dieser hat in seinem Ausgangsposting bereits begründet, warum er mktime() nicht nutzen kann.

              Bitte beachte die Unterschiede in der Namensschreibweise. Ich meine Nico nicht Niko.

              warum nutzt Du nicht einfach time()?
              weil time() das gleiche Problem hat wie mktime(), die Unix-Epoche, mit der man so schlecht auf den 18.05.1805 zurückrechnen kann ;-)

              Die Verwendung echo time(); ist im Endergebnis  $a=getdate(); echo $a[0]; gleich - aber nicht das Selbe!

              Gruß aus Berlin!
              eddi