1

我知道 php mktime()、32 位系统和年份 <1901 或 >2038 存在问题,但是,我的问题是,如果在 64 位系统上运行,这个问题是否仍然存在?

我使用了这里提到的代码并确定我的主机运行的是 64 位系统。

我从以下格式的用户输入中收集日期:

$m = 用户选择的月份(2 位数);$d = 用户选择的日期(2 位数);$y = 用户选择的年份(4 位数字)

这是我用来将输入日期转换为 unix 时间戳的代码:

$npt_date=mktime(0,0,0,$m,$d,$y);

然后代码以基本格式 xx-xx-xxxx 重新显示日期

$date_str=date('m-d-Y',$npt_date);

该代码适用于日期 > 1901,但是,当 $y < 1901 时,date() 函数的输出返回不正确的日期。

任何关于我做错了什么的建议,如果这甚至可以使用 mktime() 和 date() 函数和/或可能的解决方法,将不胜感激。

提前致谢。

4

2 回答 2

1

开始使用DateTime. 只是到1000年的有限的backwords。
而且在未来到2038年也是有限的,而未来time()也不会有问题。 这是有关该主题的一些阅读材料date()DateTime

于 2012-10-16T07:26:07.777 回答
0

据推测,如果您要存储较新的日期,您将永远不需要超过 256 个可能的年份值,这恰好适合一个字节。这为您节省了大量空间:与其使用多个字节来存储整数 1901(在许多情况下可以认为其中的 1900 年是多余的),MySQL 在内部将其仅视为数字 1,并将其显示为 1901 以使您受益。

如果您需要更多年,请使用基于 INT 的类型。

另请参阅此MySQL 是否支持历史日期(如 1200)?

于 2012-10-16T07:33:57.200 回答