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 作为年份的主要内容,如果未能解决你的问题,请参考以下文章
RDBMS:计算并打印返回日期、返回月份和返回年份 [关闭]