-2

我们正在处理使用两位数年份存储日期值的遗留(AS/400、RPG)数据库。不久前做出的决定是“any year >= 20”是19xx...... (是的,他们现在玩得很开心,而且公司成立于 1920 年代后期,所以他们的押韵实际上是有原因的。 )

我看到 PHP 使用 1969 年的截止日期,因此日期总是被假定为“1970-2069”。

但是......如果我想改变它怎么办?如果我想在我的应用程序中根据具体情况进行更改怎么办?我应该如何去做这样的事情?我真的在寻找一种解决方案,它基本上会告诉 PHP 使用不同的截止日期,并且可能会改变在该日期的任一侧完成计算的方式?

当然,我们知道那些旧的应用程序将不得不重新设计,并且数据库的日期值表示方式也会发生变化,但这并不像看起来那么容易。我们需要可以最大限度地减少必须物理更改的 PHP 端代码量的想法。所以,如果你过去直接处理过这样的问题,我很想听听你决定做什么。

4

2 回答 2

1

我认为没有任何内置的解决方案。

您要做的就是正常解析日期,然后检查结果的年份是否在 2020 和 2069 之间。如果是,则从日期中减去 100 年,得到 1920 和 1969 之间的日期。

当然,这意味着在您将其重新格式化为使用 4 位数年份之前,您将无法在数据库中拥有任何实际在 2019 年之后的日期。这是公司应该在 20 多年前做的事情,当时每个人都在为 Y2K 危机着迷。

于 2020-01-02T18:24:47.607 回答
0

如果你不想重新编译 PHP,答案是你不能。

您可以做的是使用正则表达式,例如preg_replace_callback('~<regex here>~', function($matches) { <return modified match here> }, $str);将日期预处理为 4 个字符的年份格式,然后以规范的日期时间格式解析/存储它。

于 2020-01-02T18:43:00.447 回答