How get exact time difference

时间:2018-01-08 作者:Riyas Muhammed

我有以下代码来获取时间差

$t1 = "1515397514"; //a timestamp value
$t2 = "1515402944"; //a timestamp value

echo date("M d Y H:i:s",$t1)."<br />"; //Jan 08 2018 07:45:14
echo date("M d Y H:i:s",$t2)."<br />"; //Jan 08 2018 09:15:44

echo human_time_diff( $t1, $t2); // 2 hours
返回时间为2小时,但我需要1:30 07:45-09:15的准确时差

有什么帮助吗?

1 个回复
最合适的回答,由SO网友:David Sword 整理而成

human_time_diff() 仅返回单个{number} {unit} 向后串。它四舍五入到最接近的整个单位,而不是精确地分解差异。

要获得精确的持续时间差,您需要使用自己的函数。由于这是PHP中的一个热门需求,因此在线上有很多解决方案-here\'s a clever one 我发现:

$t1 = "Jan 08 2018 07:45:14";
$t2 = "Jan 08 2018 09:15:44";

echo time_elapsed_string($t1,$t2);

function time_elapsed_string($datetime,$datetime2, $full = true) {
    $now = new DateTime($datetime2);
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        \'y\' => \'year\',
        \'m\' => \'month\',
        \'w\' => \'week\',
        \'d\' => \'day\',
        \'h\' => \'hour\',
        \'i\' => \'minute\',
        \'s\' => \'second\',
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . \' \' . $v . ($diff->$k > 1 ? \'s\' : \'\');
        } else {
            unset($string[$k]);
        }
    }

    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(\', \', $string) . \' ago\' : \'just now\';
}
这将为您提供:

1 hour, 30 minutes, 30 seconds ago

结束

相关推荐

CURRENT_TIME(‘Timestamp’)似乎与实际当前时间不同

current\\u time(“timestamp”)是否存在问题?我试图获取当前的\\u时间(“时间戳”),而不是给我current time: Jun 26 2013 14:30 它给了我:Jun 26 2013 21:30 我试着检查秒数,它给了我:1372282238 这对于给定的时间是正确的,但对于real current time. 发生了什么事?