在2038年以后访问PHP的date

我的理解是,由于PHP使用毫秒表示date的性质,因此不能表示2038年以后的date。我有一个问题,我想在将来计算date。 数千年之后。

显然我不能使用PHPdate函数来表示这个date,但是,我有一些东西在我身边…所有我想要做的就是存储年,月和日。 我不在乎时,分,秒和毫秒。

我是否认为如果不包括这些额外的信息,我应该能够在未来进一步计算,因为我愿意丢弃大量的信息。 这是目前这样的任何图书馆吗? 如果没有任何关于如何解决这个问题的build议?

您也可以使用DateTime类,它独立地内部表示时间组件。 因此它不受2038的限制(除非你使用:: getTimestamp)。

可以使用一个64位平台。

整数的大小是依赖于平台的,尽pipe最大值约为20亿是通常的值(这是32位的)。 64位平台的最大值通常约为9E18。

来源 。

找出你的平台是64位与var_dump(PHP_INT_SIZE === 8) 。 如果为TRUE ,那么你的系统是64位的。

你是正确的,PHP不允许你处理date> 2038,原生。 然而,像这样的库利用浮点数为64位的事实,因此如果需要的话可以绕过这个问题。 (所有的假设,你正在使用一个32位系统…如果你使用64位,你很好)。

PHP在5.2版本中引入了Datetime()类来解决这个问题。 但你仍然必须在64位操作系统。

忘记Windows! 即使你在Windows 64位上运行Apache 64位!

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

如果您需要计算时间戳,请使用64位系统(不是Windows):

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

您可以在Windows上使用VMWare运行LAMP服务器,并且很可能您的最终主机服务器也将使用此64位服务。

换一种说法:

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

得到它了 ?

注意:在2038年之后,time()和getTimestamp()在64位环境(linux)中都可以正常工作。