【问题标题】:DateTime object creation on MySQL non null field在 MySQL 非空字段上创建 DateTime 对象
【发布时间】:2013-05-30 17:06:10
【问题描述】:

我有一个 DATETIME NOT NULL 数据类型的 MySQL 表(没有指定默认值)。

对于MySQL默认,如果我不指定数据,值会变成0000-00-00 00:00:00

然后我从数据库中获取值,该值是0000-00-00 00:00:00。然后我尝试用检索到的数据创建一个 DateTime 对象。

$date = new DateTime('0000-00-00 00:00:00');
$formatted_date = $date->format('Y-m-d');
echo $formatted_date; // which display -0001-11-30, an obvious invalid date

检查该值是否不是有效日期的最佳方法是什么?

【问题讨论】:

  • '0000-00-00 00:00:00' 是有效日期。
  • 但是0000-00-00 00:00:00 != -0001-11-30,先生。
  • 如果您有时没有在字段中输入日期,请​​输入NULL
  • @Stephan 不正确。 new DateTime('2013-06-04'); 有效。
  • @Stephan 支持的还有更多 php.net/manual/en/datetime.formats.php

标签: php mysql datetime


【解决方案1】:

NULLIF()函数检查列:

SELECT NULLIF('0000-00-00 00:00:01', '0000-00-00 00:00:00');
// Shows 0000-00-00 00:00:01

SELECT NULLIF('0000-00-00 00:00:00', '0000-00-00 00:00:00');
// Shows NULL

但是,我建议应用 @deceze 所说的话:

如果您有时没有在字段中输入日期,请​​将其设为 NULL

数据应以适当的形式存储。所以我建议ALTER你的表列接受NULLs。

UPDv1:

如果你不需要在 PHP 中计算日期,只需要输出它,我也建议使用DATE_FORMAT(),因为它在这个问题上更可靠:

SELECT DATE_FORMAT('0000-00-00 00:00:00', '%d.%m.%Y %H:%i:%s');
// Shows '00.00.0000 00:00:00'

【讨论】:

  • @ShivanRaptor NULL 更容易检查。你需要更多吗?
【解决方案2】:
$formatted_date = "";
if($data['row'] != "0000-00-00 00:00:00")
{
  $date = new DateTime('0000-00-00 00:00:00');
  $formatted_date = $date->format('Y-m-d');
}
echo $formatted_date;

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多