1

正如标题所述,我想在不使用 strtotime、Zend 框架或 PEAR 包的情况下获得 2 个(特别是现在和过去的日期之间)日期之间的差异(以秒为单位)。

我不想详细说明我的原因,但要点是我正在处理非常旧的日期(我的意思是旧的,我在 0 AD 之前说话)。

返回的结果最好精确到给定文本时间戳的第二个。调用函数的格式应该类似于:

$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

第一个提供具有以下特点的作品的人:

  • 高可读性
  • 没有魔法(三元运算符等)

他们的答案将被投票并接受。他们的名字将记入使用他们代码的源文件的标题中。

编辑(回复:名望):

有人说在标题中加上名字看起来很糟糕,可以编辑掉。我说的是使用我想要的功能的源文件的标题。这与“名声”无关。应该在信用到期的地方给予信用,我不需要对谁创作了作品撒谎。

编辑(回复:准确性):

除了我想尽我所能保留“信息信”之外,没有其他理由。

编辑(回复:魔术):

魔术对不同的人来说是不同的东西。关于三元运算符,请尊重我的意见,就像我尊重你的一样。谢谢你。

编辑(回复:旧日期和一秒精度):

作为一名历史系的学生,这对我来说很有意义。对“一秒精度”的渴望并不是绝对的。完美虽然可以实现,但不是必需的。

4

4 回答 4

2

我建议将每个日期时间分成几部分(年、月、日、小时、分钟、秒)。然后,对于每个部分,做一个基本的总和,减去最近的(记住,BC 日期实际上是一个负数)。

你永远不会完全正确。您将不得不考虑闰年,以及世纪年是否是闰年,公历/儒略日期之间的转换等。

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

于 2010-01-14T22:46:43.490 回答
1

对于所有此类问题,请参阅日历计算(Google for it)。

哦,没有公元0年,日历是从公元前1年到公元1年,或者更确切地说,我们现代西方人是这样定义日历的,当时世界上大多数人都在使用其他系统。

或者,拨打在线计算器,例如这个计算器,可以节省大量时间。

于 2010-01-14T23:31:47.203 回答
1

有些语言和数据库会做日期运算,有些则不会。如果您将日期存储在数据库中,请尝试 postgres :

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

如果您不使用数据库,那么问题会更大。PHP 的日期算法是……好吧,我宁愿不谈论它。Python 非常好,但它是从公元前 1 年开始的。

你可能不得不自己动手...

于 2015-09-09T20:22:14.030 回答
0

你为什么不减去时间戳?

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

于 2010-01-15T18:47:02.250 回答