大家好,我正在提交一個包含兩個欄位「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\backendend -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 格式,我希望一切正常工作
P粉9669797652023-09-14 15:43:03
這裡沒有足夠的資訊來真正回答這個問題。
但從錯誤來看,問題似乎是您的 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”,請參閱其他選項 這裡。