Maison > Questions et réponses > le corps du texte
Bonjour à tous, je soumets un formulaire avec deux champs "time_in" et "time_out"
J'essaie de faire la différence entre deux dates en utilisant date_diff() Je me suis assuré que time_in dans la base de données est au formant DATE et time_out au format DATE et que les deux ne sont pas des chaînes
J'obtiens cette erreur : Erreur fatale : Erreur de type non détectée : date_diff0 : Le paramètre n°1 (SbaseObject) doit être de type DateTimeInterface, chaîne donnée dans C:ampphtdocsaicAdminscriptsbackend-script.php:97Stack Trace : #0 C:ilxampphtdocsaicAdminscriptsbackend-script.php(97):date_diff(°2023-05-19,2023-05-23#1(main) throwinC:xampphtdocsaicAdminscriptsbackend-script.phponline97
Et mon code est
<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>
Et le code backend
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>"; } }
Je n'ai pas copié l'intégralité du code du formulaire, juste un extrait Comment puis-je résoudre ce problème? ?
J'ai vérifié que time_in et time_out dans la base de données sont stockés au format DATE, j'espère que tout fonctionne correctement
P粉9669797652023-09-14 15:43:03
Il n'y a pas assez d'informations ici pour vraiment répondre à cette question.
Mais d'après l'erreur, le problème semble être que vos time_in et time_out ne sont pas des objets DateTime.
Vous devez d'abord les pousser via DateTime:CreateFromFormat
.
Cela en fera des objets DateTime.
Ensuite, date_diff vous donnera un objet DateInterval qui ne peut toujours pas être stocké proprement dans la base de données.
Envisagez d'exploiter les horodatages d'époque 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');
Remarque : "h:i a" nécessite le format "1h30", voir les autres options ici.