大家好,我正在提交一个包含两个字段“time_in”和“time_out”的表单
我试图使用 date_diff() 获取两个日期之间的差异 我确保数据库中的 time_in 是 DATE 共振峰和 time_out DATE 格式,并且两者都不是字符串
我收到此错误:致命错误:未捕获类型错误:date_diff0:参数 #1 (SbaseObject) 必须为 DateTimeInterface 类型,字符串在 C:\ampp\htdocs\aicAdmin\scripts\backend-script.php:97Stack 中给出跟踪:#0 C:ilxampp\htdocs\aicAdmin\scripts\backend-script.php(97):date_diff(°2023-05-19,2023-05-23#1(main) throwinC:\xampp\htdocs\aicAdmin\scripts\backend -script.phponline97
而我的代码是
<div class="col">
<div class="form-group">
<input type="date" class="form-control" placeholder="Enter Time in" name="time_in" value="<?php echo $time_in; ?>">
</div>
</div>
<div class="col">
<div class="form-group">
<input type="date" class="form-control" placeholder="Enter Time out" name="time_out" value="<?php echo $time_in; ?>">
</div>
</div>
以及后端代码
if(empty($_GET['id']) && !empty($_GET['name']) && $_GET['name']=='current_job'){
extract($_POST);
if(!empty($jobnumber)){
$data= [
'jobnumber'=>$jobnumber,
'revison' =>$revison,
'groupp'=>$groupp,
'checker'=>$checker,
'releasedate'=> $releasedate,
'quote_number'=> $quote_number,
'building_number'=>$building_number,
'task'=>$task,
'designer_ca'=>$designer_ca,
'designer_name'=>$designer_name,
'time_in'=>$time_in,
'time_schedule'=>$time_schedule,
'time_out'=>$time_out,
'spent_time'=>date_diff($time_out,$time_in),
'quote_weight'=>$quote_weight,
'job_weight'=>$job_weight,
'cycle_time'=>$cycle_time,
'chk_time'=>$chk_time,
'wd'=>$wd,
'remarks'=>$remarks
];
$tableName=$_GET['name'];
if(!empty($data) && !empty($tableName)){
$insertData=insert_data($data,$tableName);
if($insertData){
echo "<span class='success'>Current Job Was saved sucessfully</span>";
}else{
echo "<span class='fail'>Error!.. check your query</span>";
}
}
}else{
echo "<span class='fail'>Current Job field is empty</span>";
}
}
我没有复制整个表单代码,只是复制了一个片段 我该如何解决这个问题??
我仔细检查了数据库中的 time_in 和 time_out 是否存储为 DATE 格式,我希望一切正常工作
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这里没有足够的信息来真正回答这个问题。
但从错误来看,问题似乎是您的 time_in 和 time_out 不是 DateTime 对象。
您必须首先通过
DateTime:CreateFromFormat推送它们。 这将使它们成为 DateTime 对象。 然后 date_diff 将为您提供一个仍然无法干净地存储在数据库中的 DateInterval 对象。考虑利用 unix 纪元时间戳。
$datetime_in = DateTime::createFromFormat('h:i a', $form_time_in); $datetime_out = DateTime::createFromFormat('h:i a', $form_time_out); $seconds_elapsed = $datetime_out->format('U') - $datetime_in->format('U');注意:“h:i a”需要格式“1:30 am”,请参阅其他选项 这里。