【问题标题】:MySQL - query by date with variable date format and custom fieldsMySQL - 使用可变日期格式和自定义字段按日期查询
【发布时间】:2016-12-04 00:30:38
【问题描述】:

考虑以下场景 - 我有一个 PHP 服务器,它接收传入的 Ajax 请求,以通过匹配搜索查询的 1 个或多个字段检索记录。

系统部署在不同的服务器上,可以有不同的日期格式,如下:

客户端 1(欧洲)- 日期格式 22-02-2016 (dd-mm-yyyy)

客户端 2(美国)- 日期格式 02-22-2016 (mm-dd-yyyy)

*每个客户都可以在他们的管理面板中设置自己的自定义日期和时间格式。

所以查询可能是:

{"first_name": "john","order_date":"22-02-2016"}

{"first_name": "john","order_date":"02-22-2016"}

甚至

{"first_name": "john","order_date":"2016-02-22"}

这里是情节变厚的地方——系统还支持自定义字段,因此查询甚至可以是:

{"first_name": "john","custom_field":"22-02-2016"}

custom_field 在数据库中存储为 DATE 字段,但 PHP 服务器不知道它是哪种字段类型(从技术上讲,我可以检索此信息,但现在尝试避免使用它)。

我希望能够在不明确知道 custom_field 是否为日期字段的情况下运行数据库查询,并且仍然支持不同的格式。

理想情况下,我可以根据客户端格式更改数据库用于比较日期的格式,即我可以告诉 MySQL,如果查询包含日期字段,则使用给定的格式。或者在表/数据库架构中全局更改它。

我的替代方法是遍历请求并将每个日期字段从客户端格式转换为 MySQL 格式,或者使用正则表达式来转换查询日期。但是,如果可能的话,我宁愿在数据库级别解决它。

【问题讨论】:

  • 您应该修复 API,以便所有日期都以 ISO 8601 标准格式传递,例如 YYYY-MM-DD。
  • @GordonLinoff 谢谢,我担心我必须这样做。有没有办法在数据库级别做到这一点?
  • 我个人会选择 Unix 时间戳。更快的查询和更容易在前端操作。
  • 如果我无法控制客户如何提交日期怎么办?
  • @Yani,在插入之前将它们转换为 unix 格式。 mktime()

标签: php mysql date date-formatting


【解决方案1】:

您可以将用户提交的日期存储在标准时区中,然后计算回您希望它显示在您的 php 代码中的时区。

【讨论】:

  • 时区不是这里的问题。问题在于日期格式本身。
猜你喜欢
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多