我正在尝试在 MySQL 中存储一个date()字段到2037年的连续日期。
例如:2065-12-01
问题是该字段正在返回:1969-12-31
在 DB 上记录这些值的正确方法是什么?我应该使用VARCHAR吗?
我这样计算date
字段的值:
$future_date = date('Y-m-d', strtotime("+$number_years_to_add years"));
您可能使用时间戳字段来存储日期,而不是日期时间字段。
请参阅有关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。
在我看来,您正在使用 phpdate
和strtotime
32 位平台上的东西。这些函数在2038 年 1 月 19 日 03:14:07 UTC变成了一个南瓜,就像灰姑娘的马车一样。
您可能希望查看新的 php DateTime类,或升级到 64 位 php 实现。
另外,请阅读此内容。 在 PHP 中访问 2038 年以后的日期
(感谢您提前 22 年发现这个问题。其他人不会。)