正如标题所述,我希望在不使用:strtotime,Zend Framework或PEAR包的情况下获得2之间(特别是现在和过去的日期之间)日期之间的差异(以秒为单位)。
我不想深入了解我的理由,但其中的要点是我正在处理非常古老的日期(我的意思是老了,我在公元0年前说话)。
优选的是,返回的结果高度精确到给定的文本时间戳的第二个。调用该函数的格式应类似于:
$bar = foo("YYYY-MM-DD HH:MM:SS", "AD"); // Where AD is Anno Domini
$baz = foo("YYYY-MM-DD HH:MM:SS", "BC"); // Where BC is Before Christ
第一个提供以下工作的人:
他们的答案将被投票并接受。它们的名称将记入使用其代码的源文件的标题中。
编辑(回复:成名):有人说在标题中记下一个名字看起来很糟糕,可以将其删除。我在谈论利用我想要的功能的源文件的标题。这不是“名声”。应该在信用到期的情况下给予信用,我不需要为谁创作作品撒谎。
编辑(Re:准确性):
除了我想要尽可能地保留“信息的信件”之外没有理由。
编辑(Re:Magic):魔术对不同的人来说是不同的东西。关于三元运营商,请尊重我的意见,因为我尊重你的意见。谢谢。
编辑(回复:旧日期和一秒准确度):
作为历史学生,这对我来说很有意义。对“一秒精度”的渴望并不是绝对的。完美虽然可以实现,但并不是必需的。
答案 0 :(得分:2)
我建议将每个日期时间分成几部分(年,月,日,小时,分钟,秒)。然后,对每个部分,做一个基本总和更多减去最近(记住BC日期实际上是一个负数)。
你永远不会完全正确。你将不得不考虑闰年,以及一个世纪是否是闰年,格列高利/朱利安日期等之间的转换。
另外,我很想知道您对限制和高精度要求的推理!
答案 1 :(得分:1)
对于所有这些问题,请参阅Calendrical Calculations(Google for it)。
哦,并且没有公元0年,日历从1BC到1AD,或者更确切地说,我们现代西方人用这种方式定义日历,当时大多数世界都在使用其他系统。
或者,拨打this one等在线计算器,并节省大量时间。
答案 2 :(得分:1)
有些语言和数据库会进行日期算术,有些语言和数据库没有。如果您将日期存储在数据库中,请尝试使用postgres:
pg=> SELECT now() - 'January 8, 52 BC'::DATE;
-----------------------------
754835 days 20:27:31.223035
如果您不使用数据库,那么问题会更多。 PHP的日期算术是......好吧,我不想谈论它。 Python非常好,但它从1BC开始。
你可能需要自己动手......
答案 3 :(得分:0)
为什么不减去时间戳?
mktime(16,59,0,8,7,2001) - mktime(16,59,0,8,7,2000)
=他们之间的秒数