在2037年之后正确存储MySQL日期的方法

时间:2015-11-19 11:14:31

标签: php mysql database datetime year2038

我试图在MySQL中存储 date()字段,该字段是 2037 年的连续日期。

例如:2065-12-01

问题是该字段正在返回:1969-12-31

在DB上记录这些值的正确方法是什么?我应该使用 VARCHAR 吗?

我像这样计算date字段的值:

 $future_date = date('Y-m-d', strtotime("+$number_years_to_add years"));

2 个答案:

答案 0 :(得分:2)

您可能使用时间戳字段来存储日期而不是日期时间字段。

请参阅datetime data types上的mysql文档,特别是:

  

DATE类型用于具有日期部分但没有时间部分的值。   MySQL在' YYYY-MM-DD'中检索并显示DATE值。格式。的的   支持的范围是' 1000-01-01'到' 9999-12-31'

     

DATETIME类型用于包含日期和时间的值   部分。 MySQL在' YYYY-MM-DD中检索并显示DATETIME值   HH:MM:SS'格式。 支持的范围为' 1000-01-01 00:00:00'至   ' 9999-12-31 23:59:59'

     

TIMESTAMP数据类型用于包含date和的值   时间部分。 TIMESTAMP的范围' 1970-01-01 00:00:01' UTC到   ' 2038-01-19 03:14:07' UTC

答案 1 :(得分:2)

在我看来,就像你在32位平台上使用php datestrtotime一样。这些功能变成了南瓜,就像灰姑娘的马车一样,在03:14:07 UTC on 19 January 2038

您可能希望查看新的php DateTime类,或升级到64位php实现。

另外,请阅读此内容。 Accessing dates in PHP beyond 2038

(感谢您提前22年通知此问题。其他人不会。)