Zugriff auf Daten in PHP-jenseits von 2038
Bin ich von dem Verständnis, dass aufgrund der Art, dass PHP stellt Daten unter Verwendung von Millisekunden, Sie können Datumsangaben letzten Jahr 2038. Ich habe ein problem wo ich will, um Daten zu berechnen, die weit in die Zukunft. Tausende von Jahren entfernt.
Offensichtlich kann ich nicht verwenden, der php-date-Funktion zur Darstellung dieses Datum wegen der Grenze, allerdings, habe ich etwas auf meiner Seite... Alles was ich will zu tun ist, speichern Sie das Jahr, Monat und Tag. I nicht Pflege für die Stunden -, Minuten -, Sekunden und Millisekunden.
Bin ich richtig in der Annahme, dass ohne diese zusätzlichen Informationen sollte ich in der Lage zu berechnen, sehr viel weiter in die Zukunft, denn ich bin bereit, zu verwerfen, eine Menge von Informationen. Dies ist eine Bibliothek, die derzeit tut? Wenn nicht weiß einer einen Rat, wie man diesen Ansatz problem?
Y2.038K problem!
leider 32bit
Als wenn die PHP-5.6.15 64-bit-Windows-build verwendet 32-bit-Zeitstempel. Auch die strtotime () - Funktion gibt vorzeichenbehaftete 32-bit-timestamp (gibt negative Werte für Datumsangaben nach dem Jahr 2038) und die date () - Funktion versteht nur 32-bit-signed-timestamps.
InformationsquelleAutor Moz | 2011-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie alternativ den
DateTime
- Klasse, die intern stellt die Zeit dar, die Komponenten unabhängig voneinander. So ist es nicht anfällig für die 2038 Einschränkung (es sei denn, Sie verwenden ::getTimestamp).Danke wie es aussieht, geht das für mich aus, weil ich nicht brauchen, zu verwenden, die Zeitstempel, Super 🙂
Gibt es einen Weg, um den timestamp wieder raus, ohne dass es abgeschnitten wird?
Dies ist nur eine sehr eingeschränkte Lösung! Was ist, wenn ich verwenden möchten, filemtime() auf, um das Datum der Datei nach dem Jahr 2038 ?
nutzt die zugrunde liegende timespec struct/integer-Größe des OS. Im Fall von 64-bit-Betriebssysteme, es gibt Termine, die größer als 2038.
InformationsquelleAutor mario
Du könnte Verwendung eines 64-bit-Plattform.
Quelle.
Finden Sie heraus, Ihre Plattform ist 64-bit mit
var_dump(PHP_INT_SIZE === 8)
. WennTRUE
dein system ist 64 bit.Dennoch, was eine Schande ist PHP! Warum sind die PHP-Leute nicht in der Lage zu kompilieren, eine 32-bit-version, die verwendet Variablen, die von 64 bit? Diese kann getan werden, mit ein paar compiler-switches.
InformationsquelleAutor alex
PHP eingeführt hat Datetime() - Klasse in der version 5.2 um dieses problem zu lösen. Aber Sie müssen noch in 64-bit-OS.
InformationsquelleAutor Haza
Sind Sie richtig, dass PHP nicht erlauben, Sie zu behandeln, Termine > 2038, nativ. Allerdings gibt es Bibliotheken wie diese eine, dass sich die Tatsache zunutze, dass schwimmende Punkte sind 64 bit, so dass Sie zum umgehen dieses Problems, wenn es sein muss. (Alles unter der Annahme, dass Sie mit einem 32-bit system... wenn Sie mit 64 bit, Sie sind in Ordnung).
InformationsquelleAutor Mike Lewis
Vergessen Windows! Selbst wenn Sie Apache 64-Bit-Windows 64-Bit!
Wenn Sie brauchen, um zu berechnen, Zeitstempel, verwenden Sie eine 64-bit-system haben (nicht Windows):
Können Sie ein LAMP-Server mit VMWare über Ihre Windows-und wahrscheinlich Ihre Letzte host-server verwenden Sie das 64-Bit-service als gut.
In anderen Worten:
Habe ?
Hinweis: Zeit() und getTimestamp() beide arbeiten ok in 64bit-Umgebung (linux -) nach dem Jahr 2038 ..
Es ist VÖLLIGER Unsinn zu sagen "Vergiss Windows". Als ob dies hängt davon ab, das Betriebssystem! PHP-intern ist C++ - code. Auf Windows können Sie PROBLEMLOS mit 64-bit-Variablen AUCH auf einem 32-bit-Plattform. Visual Studio header-Dateien definieren, die 64-bit-Typen wie ULONGLONG oder LONGLONG seit Jahrzehnten. Es ist die Schuld von PHP Leute, die machen eine MENGE design-Fehler. Die richtige Antwort wäre: "Vergessen PHP". Es ist eine Schande, dass PHP immer noch verwendet 32-bit-Ganzzahlen mit Vorzeichen. Warum macht PHP nicht bieten 64-bit-Variablen vom ERSTEN TAG an, wie C++, C# und andere tun? Es ist ein schwerwiegender design-Fehler in PHP, nicht in Windows!
InformationsquelleAutor Jack M.