6

例如,我主要使用 PHP 进行编程。我今天能做些什么来防止我的程序在 2038 年由于 unix 时间戳耗尽而爆炸?我很想看到一些特定的算法、函数或逻辑可以用来防止这个问题。谢谢。

4

3 回答 3

7

将时间戳存储为 64 位或更高的整数。我敢肯定,到那时 MySQL 会更新,所以它TIMESTAMP不是 32 位的。关于 PHP,如果您使用的是 64 位服务器,我看不到任何问题。

于 2013-01-17T19:11:11.760 回答
3

除非您计划在未来 25 年内使用 32 位服务器或 PHP 二进制文件,否则我认为这不会成为问题。

PHP 是一种解释型语言,因此当您编写$stamp = 1358425440;它时,它只是 PHP 读取的一串文本,然后根据PHP的编译方式分配 X 字节的内存来存储它。因此,如果您将 PHP 二进制文件更新为支持 64 位整数的二进制文件,则无需更改代码。[至少在理论上。我们都知道 PHP 喜欢改变和弃用常用函数。]

我能看到的唯一考虑是在 PHP 之外存储整数值,即。在 mySQL 中。在这种情况下,您只需确保将时间戳存储为UNSIGNED INT、BIGINT 或 DATETIME。

SIGNED INT 将于 2038 年 1 月 19 日星期二 03:14:07 GMT 结束,但UNSIGNED INT 将持续到 2106 年 2 月 7 日星期日 06:28:15 GMT。

于 2013-01-17T19:31:42.573 回答
2

改变

 // 32 bit
    int timestampSec 

 // 64bit
    long timestampSec

用于内部存储。

于 2013-01-17T19:12:20.343 回答