MySQL 返回 -0001 作为年份

Posted

技术标签:

【中文标题】MySQL 返回 -0001 作为年份【英文标题】:MySQL returning -0001 as year 【发布时间】:2014-01-22 11:19:23 【问题描述】:

我正在尝试存储一个日期,该日期已转换并显示为一种格式(d M,Y)给用户,并以默认格式存储在 mysql 表中(yyyy-mm-dd)。

我在每个日期字段上使用以下函数存储日期:

private function formatDate($date)
    
        if(!empty($date))
        
            $changeFormat = DateTime::createFromFormat('d M, yy', $date);
            $newDate = $changeFormat->format('Y-m-d');
         else 
            return "";
        
        return $newDate;
    

并使用以下函数将其恢复为 d M, yy:

private function formatDateBack($date)
    
        if(!empty($date))
        
            $changedFormat = DateTime::createFromFormat('Y-m-d', $date);
            $newDate = $changedFormat->format('d M, Y');
         else 
            return "";
        
        return $newDate;
    

当我使用上述函数检索日期并将其显示给用户时,日期字段为空,我得到以下日期:

30 Nov, -0001

我有一种预感,这是因为在我的两个私有函数中为上述format() 函数提供了两种不同的年份格式,第一个是'd M, yy',第二个是'd M, Y'。但是,这是我可以正确更改日期格式的方式,因为如果我将 formatDateBack() 中的格式更改为“d M, yy”,我将得到一个类似于“1414 年 1 月 4 日”的日期。

我不明白为什么我要返回日期 30 Nov, -0001,即使数据库表中显示的日期是 0000-00-00。如果我把它拿回来,我什至会很感激!

如果有人可以帮助我,我很想找到解决方案。

编辑:我的日期字段数据类型是date

【问题讨论】:

不要比较!empty($date),检查$date != null,因为如果该字段是一个字符串(您可能会从数据库中获得)比较将失败。 @AlexSiri 谢谢,我会为此更新我的代码 $changeFormat = DateTime::createFromFormat('d M, yy', $date); 不应该在 d 后面加一个逗号,如('d, M, yy', $date) @Yisera 不,不必如此。我的日期格式为 2014 年 1 月 4 日 好吧。只是想知道。 【参考方案1】:
public function formatDateBack($dtm) 
       
    if(is_null($dtm) || $dtm == '0000-00-00') return 'whatEverYouLike';
    $datum = new DateTime($dtm);
    return $datum->format('d.m.Y');

【讨论】:

谢谢,成功了。我可能不需要 is_null() 检查,因为表中的日期字段默认为 0000-00-00。但我会用它来测试以确保。再次感谢您的帮助:)【参考方案2】:

你得到这个结果,可能是因为时区。如果日期为空,则将其转换为0,即格林威治标准时间 0 年 1 月 1 日。在不同的时区,该时间略有变化。

我只能认为您得到的是 11 月 30 日而不是 12 月 31 日,因为这种转换在转换字段时会在月份索引从基于 0 变为基于 1 时导致一些问题。

【讨论】:

以上是关于MySQL 返回 -0001 作为年份的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-----常用函数整理

RDBMS:计算并打印返回日期、返回月份和返回年份 [关闭]

使用给定的参考年份计算给定日期的周数

mysql 怎么查询now() 要显示年份 和季度数

为啥 getCalendar().getTime() 返回错误的年份? [复制]

如何使用用户输入作为参数运行 .py 脚本