Ich habe gerade herausgefunden, läuft eine Kalender-Skript, dass die Zeitstempel in PHP hat eine Beschränkung auf 2038. Was bedeutet es wirklich? Warum ist es 2038 statt 2050 oder 2039? Warum ein Grenzwert, wenn der Zeitstempel nur zählen Sie die Sekunden ab einem bestimmten Datum (1970)?
InformationsquelleAutor Shoe | 2011-05-04
Die Grenze ist, die durch die 4-byte-Ganzzahlen mit Vorzeichen, dass die meisten C-Bibliotheken verwenden Sie für die Darstellung, die zählen. Quick math (setzt Voraus, 365 Tage im Jahr, nicht ganz richtig ist):
Dies impliziert auch eine untere Grenze von ~1900. Einige Bibliotheken haben begonnen, die Einführung von 64-bit-Zeitalter zählt, aber Sie sind wenige und weit zwischen für den moment.
überprüfen Sie heraus meine aktualisierte Antwort. Es ist ein work in progress, aber angesichts der Tatsache, dass es nicht ein Problem für eine Weile für die meisten Menschen, das es langsam Los geht.
Ja, aber warum limit? Konnte Sie nicht einfach hinzufügen, so etwas wie if (timestamp > limit) { add another int und beginnen Sie eine neue Zählung von gibt es, hinzufügen von int1 + int2, um die Gesamt } ? Das würde lassen Sie uns andere 68 Jahre...mehr
PHP ist in gewisser Weise begrenzt, durch die C-Bibliotheken, die es stützt sich auf. Zeit im besonderen ist ein sehr heikles Thema, wenn Sie anfangen zu versuchen, zu konvertieren einen UNIX-timestamp um eine tatsächliche menschliche lesbare Datum/Zeit. Gehen haben Sie einen Blick auf die mailing-Liste Datum/Zeit-Bibliothek. Ich weiß, dass ich einfach aufgegeben, nach dem hören auf die nodatime mailing-Liste für eine Weile.
auch, alle Werte haben ein limit irgendwo. Es gibt keine Möglichkeit zu speichern, eine unendliche Daten in einen endlichen Raum (leider!). Mit 64b ganze zahlen für die Zeit rechnen, die Sie darstellen können große Zeitspannen, aber wie gesagt, der support auf der C-Seite fehlt derzeit noch. Wenn Sie Glück genug, um ein PHP kompiliert gegen eine dieser C-standard-Bibliotheken sollte man eigentlich nicht haben, diese Grenze, wenn ich zwischen den Zeilen Lesen in der Dokumentation korrekt.
InformationsquelleAutor Matthew Scharley
Den Maximalwert einer 32-bit-Ganzzahl ist 2.147.483.647. Wenn Sie +1 zu, erhalten Sie -2,147,483,647. Und 2.147.483.647 Sekunden vom 01-01-1970 00:00:00 ist Januar 19, 2038. Wenn Sie fügen Sie eine weitere Sekunde, bekommen Sie ein Datum irgendwo in 1902.
InformationsquelleAutor Sander Marechal
aufgrund der Begrenzung der INT-Datentyp auf 32-bit-Maschine
http://php.net/manual/en/function.mktime.php
Aus php.net :
"Das maximal mögliche Datum akzeptiert von mktime() und gmmktime() ist abhängig von der aktuellen Lage Zeit-zone.
Beispielsweise die 32-bit-timestamp-überlauf tritt auf 2038-01-19T03:14:08+0000Z. Aber wenn Sie in der UTC-Zeitzone -0500 (wie EST in Nordamerika), ist die maximal akzeptierte Zeit vor dem überlauf (für ältere PHP-Versionen auf Windows) ist 2038-01-18T22:14:07-0500Z, unabhängig davon, ob Sie ' re passing es zu mktime() oder gmmktime()."
InformationsquelleAutor DhruvPathak
meine Vermutung ist, dass es gespeichert ist, in eine Feste Anzahl von bits, was bedeutet, dass ein limit, wie groß die Zeitstempel erhalten können. Könnten wir etwas Mathe tun, um es herauszufinden, genau.
InformationsquelleAutor pocketfullofcheese