我想使用PHP将12/31/2099
转换为Unix时间。我尝试strtotime('12/31/2099')
,但函数返回null
。
我尝试使用在线转换工具将其转换为Unix时间,该工具提供4102358400
,当转换为日期时会01/18/2038
。
如何将日期转换为Unix时间并再次将其转换回可读格式,如12/31/2099
?
答案 0 :(得分:2)
在旧版本的PHP(< 5.1.0)中,strtotime支持最大日期为Tue,20 Jan 2038 03:14:07 UTC。要绕过此限制,请升级到5.1.0或更高版本。
64位版本不受此限制的影响。
有关详细信息,请参阅注释:http://www.php.net/strtotime
答案 1 :(得分:1)
32位Unix时间戳在2038年耗尽,所以如果你使用的是32位系统,那么就会出现问题。
答案 2 :(得分:1)
某个时间点的unix时间戳是自1970-01-01 00:00:00 UTC到此时间点的秒数。在2038-01-18这将溢出一个32位签名int - 称之为unices的Y2K错误。
请注意,这是实现的问题,而不是算法:大多数当前的实现使用无符号的32位int,但预计32位整数将在2038年之前的某个时间出现
通常的解决方法包括if-branch以检测日期是否在回绕之后并相应地进行调整。