我了解到,由于PHP代表使用毫秒的日期的性质,您无法代表2038年的日期。我有一个问题,我想在未来计算日期。几千年了。

显然,由于限制,我无法使用PHP日期函数来表示该日期,但是,我身边有一些东西……我要做的就是存储年度,月和每天。我不在乎一个小时,分钟,秒和毫秒。

我是否正确地认为,如果不包含这些其他信息,我应该能够在未来进一步计算,因为我愿意丢弃很多信息。这是当前这样做的任何库吗?如果没有,对如何解决此问题有任何建议吗?

有帮助吗?

解决方案

您也可以使用 DateTime 班级,内部代表独立的时间组成部分。因此,它不容易受到2038限制的影响(除非您使用:: getTimestamp)。

其他提示

可以 使用64位平台。

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

资源.

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

PHP引入了 约会时间() 5.2版中的课程以解决此问题。但是您仍然必须使用64位OS。

忘记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
}

知道了 ?

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

您是正确的,因为PHP本地不允许您处理> 2038的日期。但是有图书馆,例如 这个 利用浮点为64位的事实,因此,如果需要,您可以绕过此问题。 (所有这些都假设您正在使用32位系统...如果使用64位,则可以)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top