recherche

Maison  >  Questions et réponses  >  le corps du texte

Erreur lors de la soumission du formulaire avec deux champs de date et de l'utilisation de date_diff() en PHP

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粉817354783P粉817354783448 Il y a quelques jours478

répondre à tous(1)je répondrai

  • P粉966979765

    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.

    répondre
    0
  • Annulerrépondre