php mktime()和/或php date()的问题 - 1901年之前的年份 - 64位

时间:2012-10-16 07:21:54

标签: php date 64-bit mktime

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

我使用了here提到的代码,并确定我的主机运行的是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);

代码适用于日期&gt;然而,1901年,当$ y < 1901年,date()函数的输出返回错误的日期。

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

开始使用DateTime可能是个好主意。到1000年,这只是有限的背单词 此外,time()date()将来会受到2038年的限制,而DateTime也不会对未来产生任何问题。
这是some reading on the topic

答案 1 :(得分:0)

据推测,如果您要存储更多近期日期,则永远不会需要超过256个可能的年份值,这些值恰好适合一个字节。这样可以节省大量空间:而不是使用多个字节来存储整数1901,在很多情况下可以认为1900年是多余的,MySQL内部将其视为数字1,并在1901年显示为您的利益。

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

也引用此Does MySQL support historical date (like 1200)?