【问题标题】:get difference in time in HH:MM format php获取 HH:MM 格式 php 的时间差异
【发布时间】:2012-10-11 17:58:15
【问题描述】:

我怎样才能让它输出

HH:MM 格式?

 $to_time = strtotime("2008-12-13 10:42:00");  <--AM
 $from_time = strtotime("2008-12-14 8:21:00");  <-- PM
 $stat = round(abs($to_time - $from_time) / 60,2). "min";

我从中得到的是 1299 分钟

但我不知道如何让它输出

21 小时:41 米

【问题讨论】:

    标签: php time datediff


    【解决方案1】:

    首先,8:21:00 将被解释为 8AM,除非您使用 DateTime::createFromFormat() 另有说明。

    要计算时差,请使用DateTime::diff()

    $to = new DateTime("2008-12-13 10:42:00");
    $from = new DateTime("2008-12-14 8:21:00");
    
    $stat = $to->diff($from); // DateInterval object
    
    echo $stat->format('%Hh:%Im');
    

    这将显示两次之间的小时/分钟差异,但最多只能显示 24 小时。

    如果您需要超过 24 小时,您应该执行以下操作:

    $hours   = $stat->days * 24 + $stat->h;
    $minutes = $stat->i;
    
    printf('%02sh:%sm', $hours, $minutes);
    

    【讨论】:

    • 当日期间隔超过 24 小时时,这个也不会返回正确的值
    • $stat 对象是DateInterval 的一个实例,查看文档了解如何提取天/月/年。
    • 所以请删除/编辑format 行,因为它不包含有关日期的任何信息并产生误导性结果。
    【解决方案2】:

    首先,您需要在日期字符串中包含 AM 和 PM,否则 2008-12-14 8:21:00 将被解释为 8:21 AM

    现在两个日期之间的差异是2019,即 33h:19m,您不能使用标准日期格式,因为它们仅支持 24h 时钟。您应该将$stat 保留为整数,并使用sprintf 显示它,如下所示:

    echo sprintf('%02dh:%02dm', $stat/60, $stat%60);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多