我正在做一个项目,其中有大量日期需要存储在数据库 (MySQL) 中。
问题是,有些日期已满,但有些日期只有年份。
比如日期是这样的:
- 1980 年 1 月 20 日
- 2011
- 2012 年 2 月 25 日
- 2008
我在 PHP 中使用函数 date()
和 strtotime()
函数将日期转换为 Y-m-d
格式。完整日期转换成功,但只有一年的日期转换为今天的日期是错误的。
问题是:
- 如何在 PHP 中成功确定哪个是完整日期,哪个只是一年,然后将
date()
和strtotime()
函数应用于完整只有日期? - 如何在数据库中保存这些变化(完整的日期和唯一的年份)? (如果可能在单列中)
- 从数据库中获取日期时,如何知道日期是完整的还是只有一年并相应地显示出来?
编辑:
困惑。我将对日期进行操作,例如按日期排序,其中将包括完整日期和仅年份日期。是否:
- 将年份存储为 1990-00-00 并在检索时检查零?
- 将年份存储为 1990-01-01,另一个 bool 字段为 Year?
- 将年月日作为整数存储在不同的列中?
最佳答案
在数据库中,您存储正在处理的对象。您可以按原样存储“John Smith”之类的名称,也可以分别存储名字和姓氏(但是中间名放在哪里?:-) 这取决于您的要求。对于一个系统,有必要按姓氏进行过滤和排序,因此姓氏必须是一个单独的列。另一个系统可能只对全名感兴趣,而不必担心“吴昌”中哪个是名字,哪个是姓氏。
这里也一样。通常将日期存储为 DATE 或 DATETIME 列。但是您对日期和月份未知的年份感兴趣。所以你把它们分开存放。年份可能带有 NOT NULL 约束,日期和月份可为空。
我建议为年月日使用单独的整数列。不要使用必须知道的某种格式的字符串,这种格式可能会不时被破坏。
编辑:我只是注意到我还没有回答你的 PHP 问题:好吧,当你得到一个由四位数字组成的字符串时,它是一年,否则你可以将它转换为日期,然后它是一个日期,或者你可以't,则为无效数据。
关于php - 在数据库中存储完整日期或仅一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25745277/