Di artikel ini kita akan membuat script untuk menghitung selisih jam dengan PHP. Biasanya, script yang dibuat sangat sederhana seperti berikut :
Script 1
$jam_start = "07";
$menit_start = "10";
$jam_end = "16";
$menit_end = "10";
$hasil = (intVal($jam_end) - intVal($jam_start)) * 60 + (intVal($menit_end) - intVal($menit_start));
$hasil = $hasil / 60;
$hasil = number_format($hasil,2);
echo "Selisih antara ".$jam_start.":".$menit_start." dan ".$jam_end.":".$menit_end." adalah : ".$hasil;
$jam_start = "07";
$menit_start = "10";
$jam_end = "16";
$menit_end = "10";
$hasil = (intVal($jam_end) - intVal($jam_start)) * 60 + (intVal($menit_end) - intVal($menit_start));
$hasil = $hasil / 60;
$hasil = number_format($hasil,2);
echo "Selisih antara ".$jam_start.":".$menit_start." dan ".$jam_end.":".$menit_end." adalah : ".$hasil;
Hasilnya :
Penjelasan :
- hitung selisih antara jam
- konversi hasil hitung pertama menjadi menit (*60)
- hitung selisih antara menit
- gabungkan kedua hasil hitung sebelumnya
- convert kembali ke jam (/60)
- ambil 2 desimal
Ya, hasil selisih antara jam 07:10 dan 16:10 benar 9:00 atau 9 jam, namun apa yang terjadi jika kita menghitung selisih antara jam 07:10 dan 16:15 dengan script yang sama dan hanya mengubah nilai variabel nya?
Hasilnya :
Merasa ada yang salah?yap..selisih 9 jam delapan menit yang seharusnya selisih 9 jam 5 menit.
Mengapa bisa seperti itu? karena jika kita menghitung selisih antara datetime, date atau time, kita harus menggunakan fungsi diff datetime dan variabel yang diolah harus berformat datetime.
Kita coba dengan fungsi diff pada PHP seperti berikut :
Script 2
$jam_start = "07";
$menit_start = "10";
$jam_end = "16";
$menit_end = "15";
$date_awal = new DateTime($jam_start.":".$menit_start);
$date_akhir = new DateTime($jam_end.":".$menit_end);
$selisih = $date_akhir->diff($date_awal);
$jam = $selisih->format('%h');
$menit = $selisih->format('%i');
if($menit >= 0 && $menit <= 9){
$menit = "0".$menit;
}
$hasil = $jam.".".$menit;
$hasil = number_format($hasil,2);
echo "Selisih antara ".$jam_start.":".$menit_start." dan ".$jam_end.":".$menit_end." adalah : ".$hasil;
$menit_start = "10";
$jam_end = "16";
$menit_end = "15";
$date_awal = new DateTime($jam_start.":".$menit_start);
$date_akhir = new DateTime($jam_end.":".$menit_end);
$selisih = $date_akhir->diff($date_awal);
$jam = $selisih->format('%h');
$menit = $selisih->format('%i');
if($menit >= 0 && $menit <= 9){
$menit = "0".$menit;
}
$hasil = $jam.".".$menit;
$hasil = number_format($hasil,2);
echo "Selisih antara ".$jam_start.":".$menit_start." dan ".$jam_end.":".$menit_end." adalah : ".$hasil;
Hasilnya :
Yap, hasilnya sudah benar :)
Penjelasan Kode:
Pertama, kita melakukan konversi variabel menjadi DateTime, ditampung di variabel date_awal dan date_akhir. Kemudian dihitung selisihnya menggunakan fungsi diff yang ditampung di variabel bernama selisih.
Variabel selisih dipecah lagi ke variabel jam dan menit dengan format hour (format('%h')) dan minute (format('%i')). Lalu pada kondisi if , jika nilai menit berada di angka 0 sampai 9 maka tambahkan angka 0 didepannya, sehingga jika di number_format dengan desimal 2, angka yang muncul bukan 9:50 tapi 9:05.
Semoga Bermanfaat
referensi : http://php.net/manual/en/datetime.diff.php
Artikel ini dibuat oleh Yudha Tri Putra sebagai penulis artikel, diperbolehkan menyalin artikel ini secara utuh tanpa mengubah atau menambah isi artikel.
Artikel ini dibuat oleh Yudha Tri Putra sebagai penulis artikel, diperbolehkan menyalin artikel ini secara utuh tanpa mengubah atau menambah isi artikel.
kalau misalnya dibalik apakah hasilnya menjadi - ?
BalasHapus