在2038年以后的PHP中访问日期
题
我了解到,由于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位,则可以)。