【问题标题】:Php calculate hours elapsed from PM to AMPHP计算从下午到上午经过的小时数
【发布时间】:2012-06-14 23:46:06
【问题描述】:

时间令人困惑......如何在php中计算从PM到AM所经过的时间?

例如 22:00:00 (10pm)02:00:00 (02am) 应该给 04 hours elapsed。相反,我的代码返回 -08 hours

function hours_elapsed() 
{           
    $timestart = strtotime("22:00:00");
    $timestop = strtotime("02:00:00"); 

    $time_diff = $timestop - $timestart; //time difference

    return gmdate("h", $total_hours);
}

很明显,代码是以 24 小时格式计算的,所以它当然会返回 -08,但是如果没有 24 小时限制,怎么可能在经过午夜标记时获得时间?

【问题讨论】:

  • 您的代码不知道 $timestop 是第二天,因此它认为经过的时间是负数。
  • 时代的源泉是什么?它们是否以 xx:xx:xx 字符串开头?
  • @codewaggle 我从字段为TIME 的列的数据库中获取时间,格式始终为xx:xx:xx

标签: php datetime time


【解决方案1】:

-8 小时是 4 小时。如果数字是负数,只需添加12

$time_diff = $timestop - $timestart; //time difference

if ($time_diff < 0) {
  $time_diff += 12;
}

但是,如果您的日期相隔一天以上,这对您没有帮助。您还需要指定日期(如月份中的某天)以告诉 PHP 这些时间是不同的。

【讨论】:

  • 谢谢!小时从不超过23,所以我认为没关系。简单的解决方案:)
  • 如果我选择时间 01:0:00 pm 到 01:16:00 pm 那么它显示 12:16:00 但正确答案是 00:16:00 我该如何解决这个问题?
【解决方案2】:

显然 22:00:00 是 24 小时制,02:00:00 可能不是吗?

也添加日期,或测试负数并添加 12 小时。

【讨论】:

    【解决方案3】:

    我的快速解决方案:在以后的日期添加一天。

    echo gmdate('h', strtotime('1970-00-01 02:00:00') - strtotime('1970-00-00 22:00:00'));
    

    但 Blender 的回答似乎更容易。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 2012-03-28
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      相关资源
      最近更新 更多