【发布时间】:2021-04-16 06:48:05
【问题描述】:
我在 stackoverflow 中搜索了 ACN 日期,但我得到的唯一结果是 0 之后、0 到 1000 之间或 0 到 1970 之间的日期。
我需要处理人的生日,但我有很多人在 0 年之前出生。 \juliantojd 和 \jdtojulian 对我没有帮助,因为该方法应该返回一个 DateTime 对象。
如何在第 0 年之前构建一个有效的 DateTime 实例?
如果我使用 \DateTime::createFromFormat,第一个参数如 'c' 或 \DateTime::ISO8601,则返回值为 false。
PS:
-
我在这里发现了同样的问题:PHP Datetime fail to convert negative ISO8601 date 但答案不需要负年份。
-
我还发现https://bugs.php.net/bug.php?id=76785,可能是答案的一部分(但我需要将分隔符从 / 转换为 -)
谢谢。
【问题讨论】:
-
忘记旧的生日日期。当有一个非常不同的日历(以及描述日子的方式)时,谈论生日日期是没有意义的。你的意思是:罗马历、希腊历、希伯来历等?如果你想这样做,你应该发明你的虚构日历,然后使用它(并实现它)。顺便说一句,“ACN”是什么?你的意思是 AC / BCE?
-
new DateTime('-9999-01-01')在 64 位系统上对我来说似乎工作正常? 3v4l.org/fgfPE -
确实,new DateTime('-9999-01-01') 有效,但 createFromFormat 无效。并且 new DateTime('-9999/01/01') 不起作用。我通过查找日期之前是否存在减号来解决这个问题。它有效,但并不优雅。
-
您从哪里收到
-9999/01/01格式的日期?这是你存储的吗?它在你的控制之下吗? -
@El_Vanja :这不在我的控制之下,因为我们使用共享数据库,主要由 java 应用程序填充。 [-]?Y/m/d 是存储到数据库中的格式,因为它们不能将很多日期存储为日期。