Frage

Ich bin dessen Verständnis, dass Sie aufgrund der Natur, dass PHP Daten mit Millisekunden darstellt, keine Daten nach 2038 darstellen können. Ich habe ein Problem, bei dem ich in Zukunft die Daten in der Zukunft berechnen möchte. Tausende von Jahren entfernt.

Offensichtlich kann ich die PHP -Datumsfunktion nicht verwenden, um dieses Datum aufgrund der Grenze darzustellen. Ich habe jedoch etwas auf meiner Seite ... Alles, was ich tun möchte, ist das Jahr, Monat und Tag zu speichern. Ich kümmere mich nicht um Stunde, Minute, Sekunden und Millisekunden.

Bin ich richtig zu denken, dass ich ohne diese zusätzlichen Informationen viel weiter in die Zukunft berechnen kann, weil ich bereit bin, viele Informationen zu verwerfen. Ist das eine Bibliothek, die dies derzeit tut? Wenn nicht, hat irgendwelche Ratschläge, wie man dieses Problem annimmt?

War es hilfreich?

Lösung

Sie können alternativ die verwenden DateTime Klasse, die intern die Zeitkomponenten unabhängig darstellt. Daher ist es nicht anfällig für die Einschränkung von 2038 (es sei denn, Sie verwenden :: GetTimestamp).

Andere Tipps

Du könnte Verwenden Sie eine 64 -Bit -Plattform.

Die Größe einer Ganzzahl ist plattformabhängig, obwohl ein Höchstwert von etwa zwei Milliarden der übliche Wert ist (das sind 32 Bits signiert). 64-Bit-Plattformen haben normalerweise einen Höchstwert von etwa 9E18.

Quelle.

Finden Sie heraus, dass Ihre Plattform 64bit ist mit var_dump(PHP_INT_SIZE === 8). Wenn TRUE, Ihr System ist 64 Bit.

PHP hat eingeführt Terminzeit() Klasse in Version 5.2, um dieses Problem zu lösen. Aber Sie müssen immer noch in 64-Bit-Betriebssystemen sein.

Vergiss Windows! Auch wenn Sie Apache 64-Bit über Windows 64-Bit ausführen!

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns bool false using WAMP 64-Bit over Windows 64 Bit

Wenn Sie Zeitstempel berechnen müssen, verwenden Sie ein 64 -Bit -System (nicht Windows):

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns int 17000496000 using a LAMP Server

Sie können einen Lampenserver mit VMware über Ihr Windows ausführen, und höchstwahrscheinlich verwendet Ihr endgültiger Host-Server diesen 64-Bit-Dienst.

Mit anderen Worten:

if (intval("9223372036854775807")==9223372036854775807) {
  // 64-bit
} else {
  // 32-bit
}

Ich habs ?

HINWEIS: TIME () und GETTIMESTAMP () beide funktionieren in der 64 -Bit -Umgebung (Linux) nach Jahr 2038 in Ordnung.

Sie haben in diesem PHP nicht zu, dass Sie dadurch nicht die Daten> 2038, nativ verarbeiten. Es gibt jedoch Bibliotheken wie Dieses hier Dies nutzt die Tatsache, dass schwimmende Punkte 64 Bit betragen, sodass Sie dieses Problem bei Bedarf umgehen können. (Alle unter der Annahme, dass Sie ein 32 -Bit -System verwenden ... Wenn Sie 64 -Bit verwenden, geht es Ihnen gut.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top