【问题标题】:Comparing timestamps in PHP比较PHP中的时间戳
【发布时间】:2011-09-17 14:17:40
【问题描述】:

一旦恰好 24 小时过去了,我如何才能返回 true 的布尔表达式?

我使用strtotime() 输出这两次:

$time1 = 1316268919;
$time2 = 1316268898;

【问题讨论】:

  • 答案取决于您是想知道 24 小时绝对时间还是该时区的 24 小时,例如strtotime('2011-10-30 02:00:00') - strtotime('2011-10-29 02:00:00'); 在欧洲/柏林将是 90000 秒,因为那天 DST 切换。请注意,strtotime 是 DST 感知的,所以 echo strtotime('2011-10-30 02:00:00') - strtotime('2011-10-29 02:00:00 +24 hours'); 是 0。

标签: php time


【解决方案1】:

这应该可以满足您的需要:

if (($time1-$time2) == 86400) {
    // Exactly 24 hours have passed.
}

【讨论】:

  • 有效评论。但问题一年只会出现两次;)(嗯,关于 DST 的评论消失了,但部分正确)
  • 这是所有情况下的正确答案。计算时不需要考虑 DST。请注意,问题是“24 小时”,而不是“昨天的同一时间”。因此,如果在 DST 边界上,它会说上午 12 点(午夜)是从凌晨 1 点开始的 24 小时。这是正确的答案,因为两次之间已经过去了 24 小时。
  • 这取决于所使用的“24 小时”的精确定义。如果它们的意思是 24 小时,每分钟 60 分钟,那么您的代码是正确的。如果它们的意思是 24 小时,那么您的代码对于 DST 和闰秒都是不正确的。 (在这样的代码中准确地指定你想要什么是非常重要的。例如,人们经常说“每 24 小时”来表示“每天同一时间”,但它们并不是一回事.)
【解决方案2】:

strtotime() 返回自 Unix 纪元以来的秒数。因此,要找到时间差异,只需从另一个中减去一个。然后将该差异与 24 小时内的秒数 (24 * 60 * 60) 进行比较。

【讨论】:

    【解决方案3】:
    abs($time1 - $time2) === 60 * 60 * 24
    

    腹肌以防万一; time2 可能大于 time1。

    如果时间差等于 60(一分钟的秒数)* 60 *(每小时的分钟数)* 24(一天的小时数)= 86400,则存在天差

    【讨论】:

      【解决方案4】:

      24h=86400sec 所以,当两个差为 86400 时,正好是 24h

      n.b.如果适用,一年两次可能会导致 DST 出现问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 1970-01-01
        相关资源
        最近更新 更多