MySQL以年为单位返回-0001

时间:2014-01-04 20:41:43

标签: php mysql codeigniter date

我正在尝试存储一个转换并显示为一种格式(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”,我将得到类似'14 Jan,1414'的日期。

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

如果有人可以帮助我,我很乐意找到解决方法。

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

2 个答案:

答案 0 :(得分:3)

public function formatDateBack($dtm) 
{       
    if(is_null($dtm) || $dtm == '0000-00-00') return 'whatEverYouLike';
    $datum = new DateTime($dtm);
    return $datum->format('d.m.Y');
}

答案 1 :(得分:0)

由于时区原因,您可能会收到此结果。如果日期为空,则在GMT中将其翻译为0,即0年1月1日。在不同的时区,该时间略有变化。

我只能认为你是11月30日而不是12月31日,因为转换字段时这种转换会在月份指数从0基础变为1基础时导致一些问题。