问题用PHP mktime()和/或php日期() - 年之前1901年至1964年位(Issue

2019-10-17 07:27发布

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

我以前提到的代码在这里和我确定主机运行64位系统。

我收集来自于以下格式用户输入日期:

$ M =用户选择的月份(2位); $ d =用户选择天(2位); $ Y =用户选择年(4位)

下面是我使用的输入日期转换为Unix时间戳的代码:

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

和代码,然后重新显示在基本格式为xxxx-xxxx日期

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

代码工作精细的日期> 1901,然而,当$ Y <1901,从日期()函数的输出将返回不正确的日期。

任何意见,以什么我做错了,如果使用mktime()和日期()函数,甚至有可能,和/或可能的解决方法将不胜感激。

提前致谢。

Answer 1:

这可能是开始使用一个好主意, DateTime 。 它只能通过1000年backwords限制。
此外time()date()是2038年在将来的限制,而DateTime不会有未来的问题,或者。
下面是关于这个专题一些阅读 。



Answer 2:

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

如果您需要更长时间,使用基于INT型。

还参考,这是否MySQL支持的历史数据(如1200)?



文章来源: Issue with php mktime() and/or php date() - years prior to 1901 - 64-bit