以 php 为单位减去时间.奇怪的结果


Subtract time in php. Strange results

echo date('H:i', time()); // 10:15    
echo date('H:i', strtotime($this->deadline)); // 10:05
$delay = time() - strtotime($this->deadline);
echo date('H:i', $delay); // 02:10 

为什么delay是 2 小时 10 分钟而不是 10 分钟?

我认为这与时区有关。现在是欧洲/赫尔辛基。但是,我怎样才能获得两个时间戳之间的绝对差异呢?

编辑

echo time(); // 1339745334
echo strtotime($this->deadline); // 1339657500

$delay实际上不是一个正确的时间戳。这只是两个时间戳之间的差异,可能低至 1。mktime() 函数在这里可能很有用。

试试这段代码

date_diff($time_start, $time_ends);
function date_diff($d1, $d2){
        $d1 = (is_string($d1) ? strtotime($d1) : $d1);
        $d2 = (is_string($d2) ? strtotime($d2) : $d2);
        $diff_secs = abs($d1 - $d2);
        $base_year = min(date("Y", $d1), date("Y", $d2));
        $diff = mktime(0, 0, $diff_secs, 1, 1, $base_year);
        return array(
            "years" => date("Y", $diff) - $base_year,
            "months_total" => (date("Y", $diff) - $base_year) * 12 + date("n", $diff) - 1,
            "months" => date("n", $diff) - 1,
            "days_total" => floor($diff_secs / (3600 * 24)),
            "days" => date("j", $diff) - 1,
            "hours_total" => floor($diff_secs / 3600),
            "hours" => date("G", $diff),
            "minutes_total" => floor($diff_secs / 60),
            "minutes" => (int) date("i", $diff),
            "seconds_total" => $diff_secs,
            "seconds" => (int) date("s", $diff)
        );
    }
如果要

显示实时时间,则需要根据差异格式化时间。这里有一个示例函数,您可以根据需要进行扩展:

function time_diff($format,$seperator,$delay){
    $days = floor($delay/86400);
    $hours = floor(($delay%86400)/3600);
    $mins = floor(($delay%3600)/60);
    $secs = floor(($delay%60));
    $format = explode($seperator,$format);
    $return = "";
    foreach($format as $value){
        if(strlen($return) > 0){
            $return .= $seperator;
        }
        switch($value){
            case 'H':{
                $return .= $hours;
                break;
            }
            case 'i':{
                $return .= $mins;
                break;
            }
            case 'z':{
                $return .= $days;
                break;
            }
            case 's':{
                $return .= $secs;
                break;
            }
        }
        return $return;                    
    }

用法:function_time_diff("H:i",':',$delay) => 您的延迟已格式化。