【问题标题】:PHP: Time difference (min:sec:tenths)PHP:时差(分:秒:十分之一)
【发布时间】:2014-01-29 09:54:17
【问题描述】:

使用minutes:seconds.tenth操作时如何计算时差?
例如如何实现这个例子:40:24.5 - 67:52.4 = -27:27.9

我本来打算用这个,但后来发现缺少十分之一:

$time1 = new date('40:24.5');
$time2 = new date('67:52.4');
$interval = $time1->diff($time2);
echo $interval->format('%R%%i:%s:??');

【问题讨论】:

  • @user574632:不是真的……不。
  • 你在哪里找到date类? 40:34.9 - 67:52.4 = +27:27.9 是什么数学?
  • 发现我也不能使用日期,因为“H:i:s”是我能得到的最接近的日期。我的错,数学应该显示 - 而不是 +。
  • 不过,你能解释一下你是如何计算这个40:34.9 - 67:52.4 = -27:27.9的吗?

标签: php date datetime time date-arithmetic


【解决方案1】:

就像你已经“尝试过”一样,你可以使用DateTime扩展:

function time_difference($t1, $t2) {
    $t1 = DateTime::createFromFormat('i:s.u', $t1, new DateTimezone('UTC'));
    $t2 = DateTime::createFromFormat('i:s.u', $t2, new DateTimezone('UTC'));
    $diff = $t2->diff($t1);
    $u = $t2->format('u') - $t1->format('u');

    if ($u < 0) {
        $diff = $t2->modify('-1 second')->diff($t1);
        $u = 1000000 - abs($u);
    }

    $u = rtrim(sprintf('%06d', $u), '0') ?: '0';
    return $diff->format('%R%I:%S.') . $u;
}

使用示例:

echo time_difference('40:24.5', '67:52.4');
# -27:27.9

demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多