PHP:为什么 strtotime 转换会给出不同的值并且仅限于特定日期?

标签 php centos strtotime opensuse

我有两个使用不同操作系统的网络服务器。

SERVER 1 在带有 LAMP 服务器的 Centos 5 中运行。 PHP 版本 5.3.21

SERVER 2 在带有 LAMP 服务器的 openSUSE 11.3 中运行。 PHP 版本 5.3.5

两个 PHP 配置相同。有些是默认的。

我有一个包含如下代码的 php 文件:

<?php
/* TEST STRTOTIME */
echo "<br /><br />".strtotime("2038-01-01");
echo "<br /><br />".strtotime("2039-01-01");
?>

当我在 SERVER 1 中运行这个文件时,结果是:

2145934800

2177470800

但是当我在SERVER 2 中运行这个文件时,第二次转换没有产生任何结果。只显示结果是:

2145891600

为什么在两台服务器上转换的结果给出不同的值 ?而同一个文件。为什么在 SERVER 2 无法在上述日期 2038-01-01 转换?这个问题有解决办法吗?

最佳答案

您的远程服务器可能是 32 位的。您将需要一个 64 位服务器来处理日期 after roughly 2038 .

原因是您的远程服务器将其整数存储为带符号的 32 位整数。可以存储为带符号的 32 位整数的最大数是 2,147,483,647 (2^31 - 1)。由于这个数字是 1970 年 1 月 1 日(Unix 纪元)之后的秒数,你可以看到这个数字最终会用完(如果不检查边界,可能会溢出)。

Example

图片来源:Wikipedia

关于PHP:为什么 strtotime 转换会给出不同的值并且仅限于特定日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778849/

相关文章:

禁用 HTML 元素上的拖放时 PHP 表单提交不起作用

linux - Yum 在 'Loading mirror speeds' 或 'Setting package sacks' 卡住

MySQL select into outfile "file already exists"和 "file does not exist"对偶(?)案例

django - myproject 的 wsgi.py 无法读取 settings.py

php strtotime 不工作

PHP:解析任何格式的日期(尤其是:2008-10-20、2008/10/20、2008.10.20、Nov. 20/08)

PHP:strtotime 为 future 日期返回 false?

php - PEAR HTML_Quick Form函数和处理数据

php - "Call to a member function fetch_assoc() on boolean"

php - 如何使用 PHP 随机化图像数组