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