我的理解是,由于PHP使用毫秒表示日期的性质,您无法表示过去2038年的日期。我有一个问题,我想在将来计算日期。数千年之后。
显然我不能使用php日期函数来表示这个日期,因为有限制,但是,我有一些东西在我身边......我想做的就是存储年,月和日。我不关心小时,分钟,秒和毫秒。
我认为如果不包含这些额外信息,我应该能够进一步计算未来因为我愿意丢弃大量信息。这是目前正在执行此操作的库吗?如果没有,对于如何解决这个问题有任何建议吗?
答案 0 :(得分:24)
您也可以使用DateTime
类,它在内部独立地表示时间组件。因此它不受2038限制的影响(除非你使用:: getTimestamp)。
答案 1 :(得分:6)
你可以使用64位平台。
整数的大小取决于平台,尽管最大值约为20亿是通常的值(32位有符号)。 64位平台的最大值通常约为9E18。
使用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)中都能正常工作..