为什么时间戳有限制到2038年?

2022-08-30 13:07:45

我刚刚发现,运行一个日历脚本,PHP中的时间戳限制为2038年。这到底是什么意思?为什么是2038年而不是2050年或2039年?如果时间戳仅计算给定日期(1970)的秒数,为什么会有限制?


答案 1

该限制由大多数 C 库用于表示该计数的 4 字节有符号整数施加。快速数学(假设365天年,不完全正确):

2147483648 seconds ~ 68.1 years

这也意味着下限约为1900。一些库已经开始引入 64 位纪元计数,但目前它们很少,而且相差甚远。


答案 2

32 位整数的最大值为 2,147,483,647。如果将 +1 添加到该值,则得到 -2,147,483,647。2,147,483,647 秒从 01-01-1970 00:00:00 是 2038 年 1 月 19 日。如果你再加一秒钟,你就会得到一个1902年的日期。


推荐