2013-04-23 99 views
1

我有我的代码不显示日期之间的正确区别的问题。 Days Minutes和Seconds都能正常工作,但小时数似乎显示的是减数量,而不是余数,如果这是有道理的。PHP比较两个日期,但小时不能正常工作

例如,使用这些日期 2171167 = 2013年5月18日00:00:00 - 2013年4月22日20时53分53秒

我收到以下输出 25天19:06: 07

$date_one = date('Y-m-d H:i:s'); 
$date_two = date('Y-m-d H:i:s', mktime(0, 0, 0, 5, 18, 2013)); 
$Difference = abs(strtotime($date_two) - strtotime($date_one)); 

$Days = date("d", $Difference); 
//$Hours = date("H", $Difference); Why does this NOT WORK??? 
$Minutes = date("i", $Difference); 
$Seconds = date("s", $Difference); 

如果你能告诉我为什么第二个“时间”变量i注释掉不工作,我将非常感激。

+0

注释掉的线是否不返回19?它回来了什么? – jraede 2013-04-23 03:59:32

+0

它返回19,我相信它应该是3在这种情况下。 – Ryan 2013-04-23 04:01:00

+0

是的,当天在20:53:53的剩余时间是03:06:07 – Ryan 2013-04-23 04:04:00

回答

3
<?php 
header('Content-Type: text/plain'); 

$date1 = DateTime::createFromFormat('Y-m-d H:i:s', '2013-05-18 00:00:00'); 
$date2 = DateTime::createFromFormat('Y-m-d H:i:s', '2013-04-22 20:53:53'); 

$result = $date1->diff($date2); 

echo $result->format('%Y-%m-%d %H:%i:%s'); 
?> 

表演:

00-0-25 03:6:7 

分裂成变量:

list($year, $month, $day, $hour, $minute, $second) = explode('-', $result->format('%Y-%m-%d-%H-%i-%s')); 

var_dump($year, $month, $day, $hour, $minute, $second); 

表演:

string(2) "00" 
string(1) "0" 
string(2) "25" 
string(2) "03" 
string(1) "6" 
string(1) "7" 
+0

我以前见过这个,但是我无法将结果分解成他们自己的变量,所以我可以稍后分别使用它们。长期来说,我无法使用它。如果可以使用它将每个小时,分钟和秒钟分别放入自己的变量中,它对我来说完全可以工作。 – Ryan 2013-04-23 04:14:07

+1

您可以使用'$ Hours = $ result->格式('%H')'来计算小时数。 – Barmar 2013-04-23 04:16:15

+0

@epool,已更新。 – BlitZ 2013-04-23 04:18:31

0

只要改变浩urs语法。

<?php 
    $date_one = date('Y-m-d H:i:s'); 
    $date_two = date('Y-m-d H:i:s', mktime(0, 0, 0, 5, 18, 2013)); 
    $Difference = round(strtotime($date_two) - strtotime($date_one)); 

    $Days = date("d", $Difference); 
    $Hours = date("H", $Difference); 
    echo $Hours = $Difference/60; 
    $Minutes = date("i", $Difference); 
    $Seconds = date("s", $Difference); 
?> 
+0

这就是总小时数,而不是一天内的小时数。 – Barmar 2013-04-23 04:15:53

+0

对不起,这是一项解决方案。 – Ryan 2013-04-23 04:17:14

0

您使用下面的代码错误第一次约会时使用您的实际答案

$date_one = "2013-04-22 20:53:53"; //date('Y-m-d H:i:s'); 
$date_two = date('Y-m-d H:i:s', mktime(0, 0, 0, 5, 18, 2013)); 
$Difference = abs(strtotime($date_two) - strtotime($date_one)); 

echo "<br> dif ->".date('d H:i:s',$Difference); 

echo "<br> day -> ".$Days = date("d", $Difference); 
echo "<br> Hours -> ".$Hours = date("H", $Difference); 
echo "<br> Minutes -> ".$Minutes = date("i", $Difference); 
echo "<br> Seconds -> ".$Seconds = date("s", $Difference); 

:OUTPUT:

DIF - > 26 3时06分07秒

day -> 26 
Hours -> 03 
Minutes -> 06 
Seconds -> 07 
+0

我的输出DIF - > 25 22点06分07秒 日 - > 25 小时 - > 22 – Fatmuemoo 2013-04-23 04:28:33

+0

可能是你的Apache服务器的时间是不同的,那么我的 – liyakat 2013-04-23 04:32:44