【发布时间】: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-d到Y-m-d的日期,而 PHP 没有将读取它的函数。这是这个问题的全部要点。