为了账号安全,请及时绑定邮箱和手机立即绑定

在foreach循环中以小时为单位获取两个日期之间的差异

在foreach循环中以小时为单位获取两个日期之间的差异

PHP
元芳怎么了 2021-04-28 21:25:59
我想要的是获取用户的开始日期和结束日期之间的差异。一个用户有3个日期,分别具有开始日期和结束日期。并且所有日期都来自数据库,当我尝试时我无法获得所需的结果,即从日期列表中获取日期之间的差异,例如2天,3天,4天,并且没有错误显示。我的密码<?php     $eid = $_SESSION['eid'];    $sql = "SELECT empid,ToDate,FromDate from tblleaves where empid=:eid";    $query = $dbh->prepare($sql);    $query->bindParam(':eid',$eid,PDO::PARAM_STR);    $query->execute();    $results = $query->fetchAll(PDO::FETCH_OBJ);    if($query->rowCount() > 0) {        foreach($results as $result)        {              $diff = date_diff($result->ToDate, $result->FromDate);            echo $diff->format("%h Hours");            htmlentities($result->FromDate));        }    }?>数据库:
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

在数据库中的日期格式是错误的,你必须修复,首先通过更换/带有-如。str_replace('/', '-', $result->ToDate))


那么您必须将日期转换为正确的格式,例如Y-m-d,之后您可以检查差异,这是适合您的解决方案


$to = date('Y-m-d', strtotime(str_replace('/', '-', $result->ToDate)));

$from = date('Y-m-d', strtotime(str_replace('/', '-', $result->FromDate)));


$datediff = strtotime($to) - strtotime($from);


echo abs(round($datediff / (60 * 60 * 24)));

如果您想要小时数的不同,可以尝试以下代码


$hourdiff = abs(round(($datediff)/3600, 1));

我希望这能帮到您


查看完整回答
反对 回复 2021-05-14
?
慕容708150

TA贡献1831条经验 获得超4个赞

我最终得到了这段代码,这肯定可以帮助其他人。


$eid=$_SESSION['eid'];

$sql = "SELECT empid,ToDate,FromDate from tblleaves where empid=:eid";

$query = $dbh->prepare($sql);

$query->bindParam(':eid',$eid,PDO::PARAM_STR);

$query->execute();

$results=$query->fetchAll(PDO::FETCH_OBJ);


if($query->rowCount() > 0)

{

foreach($results as $result)


    $to = date('Y-m-d', strtotime(str_replace('/', '-', $result->ToDate)));

    $from = date('Y-m-d', strtotime(str_replace('/', '-', $result->FromDate)));

    $hours = round(abs(strtotime($from) - strtotime($to))/60/60).'<br>';

    $sum+=$hours;


}

echo '<h5>'.$sum.' Hours '.'</h5>';

}


?>


查看完整回答
反对 回复 2021-05-14
  • 3 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信