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

时间:2019-04-24 15:50:19

标签: php

我想要的是让用户的开始日期和结束日期有所不同。一个用户有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));
        }
    }
?>

数据库:

enter image description here

3 个答案:

答案 0 :(得分:0)

您在数据库中的日期格式不正确,您必须首先通过将request.httpMethod = "GET" request.setValue("Bearer 433263852003213|gLKD8g4ZAlADEDSSKqy8u_KZ_0", forHTTPHeaderField: "Authorization") 替换为/例如-

来解决此问题。

然后您必须将日期转换为正确的格式,例如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)));

希望这对您有帮助

答案 1 :(得分:0)

您的echo语句输出什么?

就PHP而言,它很胖,mysql / pdo返回的值是一个字符串。

您至少有两个选择。

从php文档中针对date_diff的第一个示例: https://www.php.net/manual/en/datetime.diff.php

mkfs.ext4 /dev/xvdf

请注意,他们首先将日期字符串转换为日期对象。

然后您可以使用date_diff或     $ someDateObj-> diff($ dateObjTwo)

一种可行的替代方法是选择日期字段作为unix时间戳,然后减去两个时间戳并将剩余的绝对值转换为所需格式的时间。我可能稍后再举一个例子。

  • 编辑-在我的微型电话上接听,所以我错过了日期格式问题

答案 2 :(得分:0)

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

$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>';
}

?>