【问题标题】:Parse date with %o ISO-8601 year format使用 %o ISO-8601 年份格式解析日期
【发布时间】:2013-06-17 18:37:15
【问题描述】:

简短的故事:最初编写此代码的人 [并且可能仍然是] 智障。

相关代码从我们的提供商处接收付款事件,并将其记录到数据库中,格式为:'o-m-d H:i:s'

这一切都很好,除了%o 修饰符会给你一个不同的年份,如果 ISO-8601 周“属于”不同的年份。 [Reference]

恰当的例子:我们记录了 2013 年 12 月 31 日的付款,在正常/不疯狂的日期,应该是 2012 年 12 月 31 日。因此,无论出于何种意图和目的,我们都可以看到未来发生的付款,偶尔也会发生在过去。

真正的 问题是我在 PHP 或 mySQL 中找不到任何可以解释 %o 标志的日期解析函数,从而阻止我将这些日期重新格式化为正常的东西。

有人知道如何正确解释这些日期吗?

【问题讨论】:

  • 2012-12-31 是星期一。由于规则(上个星期四),这是 2013 年的第一周。所以o-m-d 会给你2013-12-31,这在形式上是正确的。但是您将 ISO 8601 格式化程序与“标准”格式化程序混合在一起。你为什么不使用c作为 ISO 8601 的完整格式,或者只是 Y-m-dehich 会给你 2012-12-31?
  • @AxelAmthor 因为最初写这篇文章的人完全是个白痴。我不知道有什么人可以做到这一点,但是无处不在都有'o-m-d'格式。令人震惊的是,他因无能而被解雇。
  • 有谁知道如何正确解释这些日期? - 实际上它们在形式上是正确的。您需要更改代码。
  • @AxelAmthor 是的,它们是以“正确”格式编写的,但问题是我无法让 PHP read 将其重新写入相同的格式,以便我可以添加/减去日期间隔。这些o-m-d 格式在此代码中无处不在,并且已经有数千条我需要使用这种格式编写的数据库记录。即使我可以只是“更改代码”,我仍然需要能够读取并重写从 o-m-dY-m-d 的日期,而 PHP 没有将读取它的函数。这是这个问题的全部要点。

标签: php date iso8601


【解决方案1】:

不,我一无所知。但是,对 o-m-d 的所有文件执行 grep,这是一个相当独特的术语,应该可以解决整个代码库中 98% 的问题。

如果您使用的是 VCS(因为您听起来像一个理智的人,您可能是),进行提交、grep(或超级搜索和替换),看看它是否更适合您,如果是,则提交,如果不是,则丢弃。真的就这么简单。

如果这对你不起作用......好吧......愿上帝怜悯你的灵魂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 2013-05-14
    相关资源
    最近更新 更多