我的理解是,由于 PHP 使用毫秒表示日期的性质,您不能表示 2038 年之后的日期。我有一个问题,我想计算很远的将来的日期。几千年后。
显然,由于限制,我不能使用 php date 函数来表示这个日期,但是,我有一些东西在我身边……我想做的就是存储年、月和日。我不关心小时、分钟、秒和毫秒。
我是否正确地认为,如果不包括这些额外的信息,我应该能够在未来进行更远的计算,因为我愿意丢弃很多信息。这是当前执行此操作的任何库吗?如果没有,对如何解决这个问题有任何建议吗?
您也可以使用DateTime
该类,它在内部独立地表示时间组件。因此它不受 2038 限制的影响(除非您使用 ::getTimestamp)。
您可以使用 64 位平台。
整数的大小取决于平台,尽管通常值约为 20 亿的最大值(即 32 位有符号)。64 位平台的最大值通常约为 9E18。
来源。
找出您的平台是 64 位的var_dump(PHP_INT_SIZE === 8)
。如果TRUE
,您的系统是 64 位的。
PHP 在 5.2 版本中引入了Datetime()类来解决这个问题。但是您仍然必须使用 64 位操作系统。
您是正确的,因为 PHP 不允许您本地处理 > 2038 的日期。然而,像这个库这样的库利用了浮点是 64 位这一事实,因此如果需要,您可以绕过这个问题。(所有假设您使用的是 32 位系统......如果您使用的是 64 位,那么您很好)。
忘记窗户!即使您在 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
}
知道了 ?
注意: time() 和 getTimestamp() 在 2038 年后都可以在 64 位环境(linux)中正常工作。