【问题标题】:Correct way to store MySQL date after year 20372037年后存储MySQL日期的正确方法
【发布时间】:2016-02-21 12:05:27
【问题描述】:

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

例如:2065-12-01

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

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

我这样计算date 字段的值:

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

【问题讨论】:

  • A DATE 类型在这里工作得很好,你运行的是一些古老的 MySQL 版本还是什么?另外,你到底是怎么设置的?
  • 你想如何存储它?我们看不到任何示例代码...
  • 我用的是5.5.16版本
  • 你能显示你的餐桌日期吗??@HidDencum
  • 好的,这是添加日期的方法,我认为问题出在:$future_date = date('Y-m-d', strtotime("+$number_years_to_add years"));

标签: php mysql database datetime year2038


【解决方案1】:

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

请参阅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 数据类型用于同时包含日期和 时间部分。 TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC.

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-17
      • 2013-07-23
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多