1

我想要php中两个日期时间之间的差异。我想要 H:i:s 格式的差异。这是我的代码。

$start_date = 2013-08-13;
$end_date = 2013-08-23;
$start_time = 12:28:58;
$end_time = 13:16:45;

$h1 = substr("$start_time",0,-6);
$i1 = substr("$start_time",3,-3);
$s1 = substr("$start_time",6);
$h2 = substr("$end_time",0,-6);
$i2 = substr("$end_time",3,-3);
$s2 = substr("$end_time",6);

$m1 = substr("$start_date",5,-3);
$d1 = substr("$start_date",8);
$y1 = substr("$start_date",0,-6);
$m2 = substr("$end_date",5,-3);
$d2 = substr("$end_date",8);
$y2 = substr("$end_date",0,-6);

$r1=date("Y-m-d H:i:s",mktime($h1,$i1,$s1,$m1,$d1,$y1));
$r2=date("Y-m-d H:i:s",mktime($h2,$i2,$s2,$m2,$d2,$y2));
4

4 回答 4

4

当您可以使用 strtotime() 时,为什么要执行所有这些操作?它更简单:如果你用空格连接日期和时间,那么你可以使用上述函数来生成时间戳。然后,您只需通过简单的计算即可获得两者之间的差异。

最后,您将使用 date("H:i:s") 格式化生成的时间戳(在您的情况下)。

这是代码。

$start_date = "2013-08-13";
$end_date = "2013-08-23";
$start_time = "12:28:58";
$end_time = "13:16:45";

$start_date = $start_date." ".$start_time;
$end_date = $end_date." ".$end_time;

$start_date = strtotime($start_date);
$end_date = strtotime($end_date);

$difference = $end_date - $start_date;

echo date("H:i:s", $difference);
于 2013-08-23T06:36:52.740 回答
2

DateTime是这项工作的正确工具:-

$start_date = '2013-08-13';
$end_date = '2013-08-23';
$start_time = '12:28:58';
$end_time = '13:16:45';

$start = new \DateTime($start_date . ' ' . $start_time);
$end = new \DateTime($end_date . ' ' . $end_time);

$diff = $start->diff($end, true);

$diffDateInterval的一个实例,因此您可以使用它来回DateInterval::format()显时间:-

echo $diff->format("%H:%I:%S");
于 2013-08-23T08:39:00.173 回答
0

这是我用的。及其工作。如果有任何建议请告诉。感谢大家的回复。

function ensure2Digit($number) {
    if($number < 10) 
    {
        $number = '0'.$number;
    }
    return $number;
    }


$start_date = "2013-08-13";
$end_date = "2013-08-23";
$start_time = "12:28:58";
$end_time = "13:16:45";

$start_date = $start_date." ".$start_time;
$end_date = $end_date." ".$end_time;

$start_date = strtotime($start_date);
$end_date = strtotime($end_date);

$difference = $end_date - $start_date;

$h = ensure2Digit(floor($difference / 3600));
$m = ensure2Digit(floor(($difference / 60) % 60));
$s = ensure2Digit($difference % 60);
$time_taken =  $h.":".$m.":".$s;
于 2013-08-26T12:07:07.480 回答
-1

刚刚掀起这个:

function sec_diff($date_ini, $date_end, $time_ini='00:00:00', $time_end='00:00:00')
{
    $d_ini=explode('-', $date_ini);
    $h_ini=explode(':', $time_ini);
    $d_end=explode('-', $date_end);
    $h_end=explode(':', $time_end);

    $t_ini=mktime($h_ini[0], $h_ini[1], $h_ini[2], $d_ini[1], $d_ini[2], $d_ini[0]);
    $t_end=mktime($h_end[0], $h_end[1], $h_end[2], $d_end[1], $d_end[2], $d_end[0]);

    return $t_end-$t_ini;
}

它会在几秒钟内为您带来差异。您可以轻松地对结果进行操作以获得所需的格式:result / 3600 将为您提供小时数。该操作的其余部分将为您提供备用秒数,您可以 /60 获得分钟数。任何休息都是秒。

于 2013-08-23T06:36:08.050 回答