我知道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()函数甚至可能这样做,和/或可能的解决方法将非常感激。
提前致谢。
答案 0 :(得分:1)
开始使用DateTime
可能是个好主意。到1000年,这只是有限的背单词
此外,time()
和date()
将来会受到2038年的限制,而DateTime
也不会对未来产生任何问题。
这是some reading on the topic。
答案 1 :(得分:0)
据推测,如果您要存储更多近期日期,则永远不会需要超过256个可能的年份值,这些值恰好适合一个字节。这样可以节省大量空间:而不是使用多个字节来存储整数1901,在很多情况下可以认为1900年是多余的,MySQL内部将其视为数字1,并在1901年显示为您的利益。
如果您需要更多年份,请使用基于INT的类型。