php – 仅知道年份的日期(例如1570-00-00)

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

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

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

$Born = $row['Born'];

$Birth = DateTime::createFromFormat('Y-m-d', $Born);

我的问题应该在@ Storing a date where only the year may be known回答,但我很困惑.听起来有几种选择,我不确定哪种选择在我的情况下是最好的选择.

将月份和日期与年份分开似乎很简单.所以我有一个名为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

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

解决方法:

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

您可以使用3个额外字段IsExactYear,IsExactMonth,IsExactDayDate进行更深入的操作,以便对有限精度的历史日期进行建模.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...