php - 在数据库中存储完整日期或仅一年

标签 php mysql date

我正在做一个项目,其中有大量日期需要存储在数据库 (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/

相关文章:

php - APACHE 崩溃 : Parent: child process exited with status 3221225477 -- Restarting

SQL:日期字段集中的最早日期

date - 宏变量到 SAS 日期

php - 使用 FilesystemIterator 将尾部斜杠应用于文件夹

php - 如何在cakephp中运行子查询

php - 用重音切割字符串

php - mysql_real_escape_string() 对于十六进制编码数据不安全吗?

PHP mysql 递归函数 array_unshift

mysql - AWS RDS MySQL 跨区域复制

mysql - 如何从只记录最近三天的表中选择数据