如何在不使用的2个日期之间获得(秒内)的差异:strtotime,Zend框架或梨包装?

StackOverflow https://stackoverflow.com/questions/2068033

  •  20-09-2019
  •  | 
  •  

如标题所述,我想在不使用的情况下(特别是在现在的日期到过去的日期)之间(特别是在现在的日期)之间获得差异(以秒为单位):strtotime,Zend Framework或Pear Package。

我不想了解我的理由的细节,但要的要旨是我正在与非常旧的日期合作(我的意思是老了,我在公元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

提供功能的第一个人:

  • 高可读性
  • 没有魔术(三元操作员等)

他们的答案将被上投票和接受。他们的名称将在使用其代码的源文件的标题中归功于。

编辑(回复:成名):

有人说,在标题中归功于名字看起来很糟糕,可以被编辑。我说的是利用我想要的功能的源文件的标题。这与“名望”无关。应在应得的信用额的地方给予信用,而我无需撒谎。

编辑(回复:准确性):

除了我想尽可能地保留“消息的字母”之外,没有其他理由。

编辑(回复:魔术):

魔术对不同的人来说是不同的事情。关于三元操作员,请尊重我的意见。谢谢你。

编辑(回复:旧日期和一秒钟的准确性):

作为历史的学生,对我来说很有意义。对“一秒准确性”的渴望不是绝对的。完美虽然可以实现,但不需要。

有帮助吗?

解决方案

我建议将每个日期时间分成零件(年,月,日期,小时,分钟,秒)。然后,在每个部分中,要减少最新的基本总和(记住BC日期实际上是负数)。

您将永远不会完全正确。您将不得不考虑LEAP年,并且一个世纪是leap年,这是Gregorian/Julian Dates等之间的转变。

另外,我很想知道您对限制和高精度要求的理由!

其他提示

有关所有此类问题,请参见日历计算(Google for IT)。

哦,而且没有公元0年,日历从1BC上升到1AD,或者更确切地说,我们现代西方人以这种方式定义了日历,当时世界上大多数人都在使用其他系统。

或者,呼叫在线计算器,例如 这个 并节省很多时间。

某些语言和数据库确实可以日期算术,有些则不会。如果将日期存储在数据库中,请尝试使用Postgres:

pg=> SELECT now() - 'January 8, 52 BC'::DATE;
-----------------------------
 754835 days 20:27:31.223035

如果您不使用数据库,那么它会遇到更多问题。 PHP的日期算术是...好吧,我宁愿不谈论它。 Python's非常好,但它始于1BC。

您可能必须自己滚动...

您为什么不减去时间戳?

mktime(16,59,0,8,7,2001) - mktime(16,59,0,8,7,2000) =他们之间的秒

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top