只有年份的日期(例如1570-00-00)

Dav*_*rom 3 php mysql date

我有一个数据库表,其中包含一个名为Born(type = date)的字段,其中包含人们的出生日期(例如1970-07-08).但是,对于生日不确切知道的人,我该怎么办?

例如,一个历史人物诞生于1570年.所以我把它放在我的数据库中:1570-00-00.但它显示在1569年11月30日.

这是我正在使用的代码,其中$ Born是存储在数据库中的日期...

$Born = $row['Born'];

$Birth = DateTime::createFromFormat('Y-m-d', $Born);
Run Code Online (Sandbox Code Playgroud)

我的问题应该回答@ 存储一个日期,只有年份可能已知,但我很困惑.听起来有几种选择,我不确定哪种选择在我的情况下是最好的选择.

将月份和日期与年份分开似乎很简单.所以我有一个名为Year(type = year)的字段和另一个名为Date的字段,用于月份和日期.但是我可以将后者设置为"日期"字段并插入值01-01(1月1日),或者我是否必须插入完整日期(例如1570-01-01),然后单独插入年份年度领域?

换句话说,这里有两种方法可以将1970年4月5日的日期存储在数据库表中:

年| 1970年的日期| 04-05 1970 | 1970年4月5日

如果我要将日期放在两个单独的字段中,那么第一种方法可能是最简单的.或者有更好的方法吗?

以下是我如何存储仅包含一年的日期:

1988年| 1988-00-00

我的查询和显示脚本只是从Year字段中提取1988并忽略由双零(00)组成的每个值; 换句话说,它将忽略第二个字段(日期).

我还考虑过将字段保持值从"年"改为"整数"多年,因为我在年龄较大时会出现"超出范围值"错误.

由于所有的困惑,我实际上想创建三个字段 - 年,月和日 - 并且只显示"普通英语"值,如下所示:

1970年| 一月| 10

这会是一个好的解决方案,还是会遭受一些重大的性能损失?

Mit*_*eat 6

我会使用完整日期" 1570-01-01"并IsExactDate在您不知道确切日期的情况下将布尔字段 设置为False.实际上,我会添加一个默认值IsExactDate 并将其设置为True.这样,您只需在添加非确切日期时明确地设置它.

你可以用类似3个额外的领域采取进一步IsExactYear,IsExactMonth,IsExactDayDate建模精度有限的历史日期.