2038年以后的PHP版本

8mmmxcuj  于 5个月前  发布在  PHP
关注(0)|答案(6)|浏览(57)

我的理解是,由于PHP使用毫秒表示日期的性质,你不能表示2038年以后的日期。我有一个问题,我想计算遥远的未来的日期。几千年以后。
显然,由于限制,我不能使用php date函数来表示这个日期,然而,我有自己的方法..
我认为如果不包括这些额外的信息,我应该能够计算出更远的未来,因为我愿意放弃很多信息,这是正确的吗?这是目前正在做的任何图书馆吗?如果没有,有任何关于如何解决这个问题的建议吗?

m1m5dgzv

m1m5dgzv1#

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

ygya80vv

ygya80vv2#

您 * 可以 * 使用64位平台。
整数的大小取决于平台,尽管最大值约为20亿是通常的值(即32位带符号)。64位平台的最大值通常约为9E18。
Source的一个。
使用var_dump(PHP_INT_SIZE === 8)确定您的平台是64位。如果是TRUE,则您的系统是64位。

gupuwyp2

gupuwyp23#

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

3b6akqbq

3b6akqbq4#

你是对的,PHP不允许你处理大于2038的日期。然而,有一些库,如this one,利用了浮点数是64位的事实,因此如果需要的话,允许你绕过这个问题。(所有这些都假设你使用的是32位系统.如果你使用的是64位,你就可以了)。

1tu0hz3e

1tu0hz3e5#

忘记Windows吧!即使你运行的是Apache 64-Bit而不是Windows 64-Bit!

$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
}


明白了吗?

  • 注意:time()和getTimestamp()在2038年后的64位环境(Linux)下都可以正常工作。*
wztqucjr

wztqucjr6#

这个问题是最近在PHP中发现的第一个问题之一。
我认为最好从DateTimeImmutable获取用户的日期,并将其存储为数据库中的变量char。
在检索日期时,您可以使用一个简单的函数以您喜欢的格式显示日期。
例如,日期可以是:

$date = "4069-03-27 00:00:00";
// store it as a variable char in the database

字符串
你可以创建一个函数来进行比较,减法,还可以做更多的事情。

相关问题