我正在尝试存储一个转换并显示为一种格式(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
答案 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基础时导致一些问题。