Maximale Zeit() | PHP

Lesezeit: 3 Minuten

Es ist eine ziemlich dumme Frage, aber was wäre der maximale INT-Wert von a time() und sein zukünftiges Datum, z

1. Januar 2999

Würde time() jemals diesen Wert erreichen? Gehen für eine große time() Wert würde dies zurückgeben:

Do, 1. Januar 1970, 1:00 Uhr

Ein normales int-Datum

1287320788 – gibt das heutige Datum aus: Sonntag, 17. Oktober 2010, 14:06 Uhr

Aber ich bin nur neugierig auf das größte int-Datum und das letzte Datum.

  • Für MySQL siehe auch stackoverflow.com/questions/2012589/…

    – Wrikken

    17. Oktober 2010 um 13:30 Uhr

  • Dieser Link enthält auch gute Hintergrundinformationen auf der PHP-Seite

    – Pekka

    17. Oktober 2010 um 13:32 Uhr

  • Wurde das kürzlich in PHP behoben time()? Der größte Wert, den es zu einem Date machen kann, ist jetzt 9223372036854772207 (04.12.292277026596 15:30:07) (sehr nahe am 64-Bit-Ganzzahl-Maximalwert)

    – Florian Müller

    3. September 2013 um 12:27 Uhr


Der letzte 32-Bit-Ganzzahl-Zeitstempel wird am 19. Januar 2038 erreicht. Dies ist als bekannt Jahr 2038 Problem.

  • Danke für diesen Pekka. Wird dies jemals gelöst werden, wenn wir es fast erreichen?

    – MacMac

    17. Oktober 2010 um 13:54 Uhr

  • @YouBook, wenn PHP bis dahin noch existiert, wahrscheinlich. Es wird einfach zu beheben sein, indem das zugrunde liegende System auf größere INTs umgestellt wird – wird dank der schwachen Typisierung von PHP kein großes Problem darstellen. Alternativ verwenden DateTime wie von Gordon vorgeschlagen

    – Pekka

    17. Oktober 2010 um 13:55 Uhr


  • Grundsätzlich löst sich das Problem per Definition von selbst, da 2038 im 32-Bit-System die maximale Ganzzahl ist und die meisten Computer bereits 64-Bit sind, was eine größere Bandbreite an Ganzzahlen bedeutet …

    – Tomasz Kapłoński

    21. Oktober 2015 um 7:10 Uhr

Gordons Benutzeravatar
Gordon

PHP speichert die höchste Ganzzahl, die es darstellen kann, in der PHP_INT_MAX Konstante:

date('Y-m-d H:i:s', PHP_INT_MAX); // 2038-01-19 04:14:07

Wenn Sie darüber hinaus mit Datumsangaben arbeiten möchten, sollten Sie die Verwendung von in Betracht ziehen DateTime-APIz.B

$dt = new DateTime('1st January 2999');
$dt->add(DateInterval::createFromDateString('+1 day'));
echo $dt->format('Y-m-d H:i:s'); // 2999-01-02 00:00:00
echo $dt->format('U');           // 32472226800

  • Ja, mit DateTime und – auf mySQL-Seite – die DATETIME Feldtyp behebt das Problem vollständig.

    – Pekka

    17. Oktober 2010 um 13:33 Uhr


Denken Sie daran, dass das Y2038-Problem nicht auf 64-Bit-Systemen zutrifft.

  • Mhm, bist du sicher? Wird die interne Verarbeitung von Ganzzahlen in PHP automatisch auf 64-Bit umgestellt?

    – Pekka

    17. Oktober 2010 um 15:43 Uhr

  • Ich bin mir nicht ganz sicher, aber es scheint sich auf meiner Kiste zu überschlagen… 🙂

    – oglgo

    17. Oktober 2010 um 16:51 Uhr

  • 64-Bit wird für die nächsten ~300 Milliarden Jahre in Ordnung sein.

    – Jona

    7. Juni 2013 um 16:33 Uhr


  • Vorsichtig sein. Das Y2038-Problem tritt immer auf Windows-Systemen auf. “64-Bit-Plattformen haben normalerweise einen Maximalwert von etwa 9E18, außer Windows, das immer 32 Bit ist.” php.net/manual/en/language.types.integer.php

    – Westy92

    29. September 2015 um 4:39 Uhr

  • Nun, wenn ich mich richtig erinnere, verwendet XAMPP unter Windows auch auf 64-Bit-Computern immer noch 32-Bit-Ganzzahlen.

    – Christian

    4. April 2019 um 19:41 Uhr

Benutzeravatar von Vladyslav Savchenko
Wladyslaw Savchenko

Der kürzeste Weg, den ich kenne, ist, das morgige Datum zu bekommen:

date(“Ynj”, strtotime(“+1 Tag”))

date("Y-n-j", PHP_INT_MAX) auf 64bit-Systemen ergibt potentiell gefährlichen Wert: 292277026596-12-4

Auf 64-Bit-Plattformen PHP_INT_MAX spiegelt nicht den maximalen INT-Wert für 32-Bit-Plattformen wider. So erhalten Sie es:

$max32bitInt = PHP_INT_SIZE == 4 ? PHP_INT_MAX : PHP_INT_MAX>>32;

Wenn Sie immer eine 64-Bit-Plattform verwenden, verwenden Sie einfach:

PHP_INT_MAX>>32

Benutzeravatar von Ram Sharma
Ram Sharma

DateTime scheint auch auf 64-Bit-Servern 32-Bit zu verwenden. Also gerät man in Schwierigkeiten.

Ich habe es so gelöst:

new DateTime("99999/12/31 00:00:00");

Da das Datum die maximale Länge für DateTime überschreitet, verwendet date den maximal möglichen Wert und gibt ein DateTime-Objekt wie dieses zurück (überprüft mit var_dump) :

object(DateTime)#9 (3) { ["date"]=> string(19) "2031-09-12 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" } }

Ich bin mir nicht sicher, ob es sich mit den Versionen von PHP unterscheidet. Ich habe es mit Version 5.4 getestet.

1405220cookie-checkMaximale Zeit() | PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy