Rumah  >  Soal Jawab  >  teks badan

Keputusan yang tidak dijangka berlaku apabila mengira perbezaan masa dalam saat dalam PHP dengan menukar dua tarikh kepada cap waktu Unix.

<p>Seperti tajuk, saya cuba mencari perbezaan dalam saat dan kemudian menukar saat tersebut kepada hari dan jam. </p> <p>Selepas membaca dan mengikuti soalan yang serupa, saya membina fungsi yang menambah jam, hari, minggu, bulan atau tahun yang saya mahukan kepada tarikh tarikh hari ini dan saya mendapat hasil yang betul daripada bahagian ini. </p> <p> Walau bagaimanapun, saya kemudian cuba menukar dua tarikh (tarikh mula dan tarikh alih) kepada cap waktu unix, menolak kedua-dua cap masa untuk mencari perbezaan antara dua tarikh dalam beberapa saat, dan kemudian menukar saya tidak mendapat hasil yang saya jangkakan untuk hari atau minit (/86400 dan /3600). </p> <p>Ini ialah kodnya..</p> <pre class="brush:php;toolbar:false;"><?php $dateTimeNow = tarikh(); fungsi dateTimeShift($dateTimeIn, $lengthNum, $lengthWord) { $shifted = date("Y-m-d H:i:s", strtotime($dateTimeIn." + $lengthNum $lengthWord")); $perbezaan = strtotime($shifted)-strtotime($dateTimeIn); kembalikan "br> } echo dateTimeShift($dateTimeNow, "1", "hari"); ?></pra> <p>Hasil semasa ialah...</p> <blockquote> <p>2023-01-04 09:37:51 > </blockquote> <p>Saya menjangkakan ia akan menjadi seperti ini</p> <blockquote> <p>2023-01-04 09:37:51 > </blockquote></p>
P粉237029457P粉237029457385 hari yang lalu491

membalas semua(1)saya akan balas

  • P粉769413355

    P粉7694133552023-09-04 00:23:10

    Masalahnya ialah anda menggunakan fungsi date() tanpa parameter, cuba gunakan ini:

    $dateTimeNow = date("Y-m-d H:i:s");
    
    function dateTimeShift($dateTimeIn, $lengthNum, $lengthWord) {
        $shifted = date("Y-m-d H:i:s", strtotime($dateTimeIn." + $lengthNum $lengthWord"));
        $difference = strtotime($shifted)-strtotime($dateTimeIn);
        return $shifted . " <br> " . floor($difference/86400) . " days or " . floor($difference/3600) . " hours";
    }
    
    echo dateTimeShift($dateTimeNow, "1", "day");

    Output:

    2023-01-04 09:57:31 <br> 1 days or 24 hours

    balas
    0
  • Batalbalas