4

我正在尝试在 MySQL 中存储一个date()字段到2037年的连续日期。

例如:2065-12-01

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

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

我这样计算date字段的值:

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

2 回答 2

5

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

请参阅有关datetime 数据类型的mysql 文档,特别是:

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

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

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

于 2015-11-19T11:28:33.907 回答
3

在我看来,您正在使用 phpdatestrtotime32 位平台上的东西。这些函数在2038 年 1 月 19 日 03:14:07 UTC变成了一个南瓜,就像灰姑娘的马车一样。

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

另外,请阅读此内容。 在 PHP 中访问 2038 年以后的日期

(感谢您提前 22 年发现这个问题。其他人不会。)

于 2015-11-19T11:48:45.190 回答