在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)中都可以正常工作。