访问PHP中的日期超过2038年

时间:2011-03-16 00:33:32

标签: php date time timestamp year2038

我的理解是,由于PHP使用毫秒表示日期的性质,您无法表示过去2038年的日期。我有一个问题,我想在将来计算日期。数千年之后。

显然我不能使用php日期函数来表示这个日期,因为有限制,但是,我有一些东西在我身边......我想做的就是存储年,月和日。我不关心小时,分钟,秒和毫秒。

我认为如果不包含这些额外信息,我应该能够进一步计算未来因为我愿意丢弃大量信息。这是目前正在执行此操作的库吗?如果没有,对于如何解决这个问题有任何建议吗?

5 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:6)

可以使用64位平台。

  

整数的大小取决于平台,尽管最大值约为20亿是通常的值(32位有符号)。 64位平台的最大值通常约为9E18。

Source

使用var_dump(PHP_INT_SIZE === 8)找出您的平台是64位。如果TRUE,则系统为64位。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

你是正确的,因为PHP不允许你处理日期> 2038年,原生。但是,有this one等库可以利用浮点为64位的事实,从而允许您在需要时绕过此问题。 (所有假设您使用的是32位系统......如果您使用的是64位,那么你很好。)

答案 4 :(得分:1)

忘了Windows!即使您通过Windows 64-Bit运行Apache 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
}

知道了吗?

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