Rumah  >  Soal Jawab  >  teks badan

Ralat semasa menyerahkan borang dengan dua medan tarikh dan menggunakan date_diff() dalam PHP

Hello semua, saya sedang menghantar borang dengan dua medan "masa_masuk" dan "masa_habis"

Saya cuba mendapatkan perbezaan antara dua tarikh menggunakan date_diff() Saya memastikan bahawa time_in dalam pangkalan data adalah dalam format DATE dan time_out dalam format DATE dan kedua-duanya bukan rentetan

Saya mendapat ralat ini: Ralat maut: Ralat jenis tidak ditangkap: date_diff0: Parameter #1 (SbaseObject) mestilah jenis DateTimeInterface, rentetan diberikan dalam C:ampphtdocsaicAdminscriptsbackend-script.php:97Stack Trace: #0 C:ilxampphtdocsaicAdminscriptsbackend-script.php(97):date_diff(°2023-05-19,2023-05-23#1(utama) throwinC:xampphtdocsaicAdminscriptsbackend-script.phponline97

Dan kod saya ialah

<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>

Dan kod hujung belakang

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>";
}

}

Saya tidak menyalin keseluruhan kod borang, hanya coretan Bagaimanakah saya boleh menyelesaikan masalah ini? ?

Saya menyemak semula bahawa masa_masuk dan masa_habis dalam pangkalan data disimpan sebagai format DATE, saya harap semuanya berfungsi dengan baik

P粉817354783P粉817354783402 hari yang lalu446

membalas semua(1)saya akan balas

  • P粉966979765

    P粉9669797652023-09-14 15:43:03

    Tidak ada maklumat yang mencukupi di sini untuk benar-benar menjawab soalan ini.

    Tetapi dari kesilapan itu, masalahnya nampaknya masa_masuk dan masa_masa anda bukan objek DateTime.

    Anda mesti menolak mereka melalui DateTime:CreateFromFormat dahulu. Ini akan menjadikan mereka objek DateTime. Kemudian date_diff akan memberi anda objek DateInterval yang masih tidak boleh disimpan dengan bersih dalam pangkalan data.

    Pertimbangkan untuk memanfaatkan cap waktu zaman 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');

    Nota: "h:i a" memerlukan format "1:30 pagi", lihat pilihan lain di sini.

    balas
    0
  • Batalbalas