【问题标题】:PHP Comparing two dates but Hours not functioning correctlyPHP比较两个日期但小时无法正常运行
【发布时间】:2013-04-23 03:56:27
【问题描述】:

我的代码无法显示正确的日期差异时遇到问题。 Days Minutes 和 Seconds 都可以正常工作,但 Hours 似乎显示的是减去的数量,而不是剩余部分,如果这有意义的话。

例如,使用这些日期 2171167 = 2013-05-18 00:00:00 - 2013-04-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);

如果您能告诉我为什么我注释掉的第二个“小时”变量不起作用,我将不胜感激。

【问题讨论】:

  • 被注释掉的行不返回 19 吗?它返回了什么?
  • 它返回 19,我相信在这种情况下应该是 3。
  • 是的,当天 20:53:53 的剩余时间是 03:06:07
  • 然后它转换为洛杉矶时区而不是您当地的时区。但date() 的参数始终是 Unix 时间戳,即 UTC。
  • 这就是为什么 PHP 有一个 DateInterval 类来处理时间段的原因。

标签: php date


【解决方案1】:
<?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"

【讨论】:

  • 我以前见过这个,但我无法将结果分解为他们自己的变量,所以我可以稍后单独使用它们。长期我不能用这个。如果可以使用此方法将小时、分钟和秒分别放入自己的变量中,那么它对我来说非常有用。
  • 您可以使用$Hours = $result-&gt;format('%H') 来获取时间。
【解决方案2】:

你使用了错误的第一次约会,使用下面的代码来回答你的实际答案

$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);

:输出:

差异 -> 26 03:06:07

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

【讨论】:

  • 我的输出是差异 ->25 22:06:07 天 -> 25 小时 -> 22
  • 可能你的apache服务器时间和我的不一样
【解决方案3】:

只需更改小时语法。

<?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);
?>

【讨论】:

  • 这是总小时数,而不仅仅是一天中的小时数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2015-06-25
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多