
Menghitung Selisih Waktu Dengan PHP adalah kebutuhan umum saat kalian membuat fitur laporan, masa aktif, durasi kerja, hingga hitung mundur event.
Halo teman-teman! Sering bingung memilih cara yang tepat untuk menghitung beda waktu? Tenang, pada artikel ini kodelyly.com akan membahas cara paling akurat, mudah, dan aman digunakan, lengkap dengan contoh kode singkat.
Menghitung Selisih Waktu Dengan PHP
1) Metode Paling Akurat: DateTime + diff()
Metode ini paling direkomendasikan karena memahami kalender (leap year, peralihan bulan) serta zona waktu.
<?php
$mulai = new DateTime('2025-11-01 08:15:00', new DateTimeZone('Asia/Makassar'));
$selesai = new DateTime('2025-11-03 12:45:00', new DateTimeZone('Asia/Makassar'));
$interval = $mulai->diff($selesai);
// Hasil terformat, misal: "2 hari 4 jam 30 menit"
echo $interval->format('%a hari %h jam %i menit');
Penjelasan singkat: DateTime::diff() menghasilkan DateInterval yang dapat kalian format fleksibel %a (total hari), %h (jam), %i (menit), dan seterusnya.
2) Metode Cepat: strtotime() Untuk Detik Total
Cocok ketika kalian hanya butuh selisih dalam detik/menit/jam tanpa pecahan kalender.
<?php
$mulai = '2025-11-01 08:15:00';
$selesai = '2025-11-03 12:45:00';
$detik = abs(strtotime($selesai) - strtotime($mulai));
$jam = floor($detik / 3600);
$menit = floor(($detik % 3600) / 60);
$sisa = $detik % 60;
echo "$jam jam $menit menit $sisa detik";
Tips: pastikan format tanggal konsisten dan berada pada zona waktu yang sama agar hasil stabil.
3) Membuat Output “Ramah Manusia”
Kalian bisa memformat DateInterval agar rapi dan menghindari nol di depan:
<?php
function formatInterval(DateInterval $i): string {
$bagian = [];
if ($i->d) $bagian[] = $i->d.' hari';
if ($i->h) $bagian[] = $i->h.' jam';
if ($i->i) $bagian[] = $i->i.' menit';
if ($i->s && empty($bagian)) $bagian[] = $i->s.' detik';
return implode(' ', $bagian) ?: '0 detik';
}
$mulai = new DateTime('2025-11-01 08:15:00');
$akhir = new DateTime('2025-11-03 12:45:00');
echo formatInterval($mulai->diff($akhir));
Zona Waktu Dan Akurasi
Selalu set zona waktu yang benar dengan date_default_timezone_set('Asia/Makassar') atau objek DateTimeZone. Ini mencegah hasil meleset ketika server berada di zona berbeda. Indonesia tidak memakai DST, tetapi jika aplikasi kalian lintas negara, DateTime akan menangani perubahan tersebut dengan baik.
Ringkas Perbandingan Metode
| Metode | Kelebihan | Keterbatasan | Contoh Singkat |
|---|---|---|---|
| DateTime + diff | Akurat kalender & TZ | Sedikit lebih verbose | $a->diff($b)->format() |
| strtotime (detik) | Cepat & sederhana | Tidak paham kalender | abs(strtotime(B)-strtotime(A)) |
| Library (opsional) | Fitur kaya (humanize) | Perlu instalasi | Carbon diffForHumans() |
Kesimpulan
Untuk kebutuhan produksi, DateTime + diff() adalah pilihan utama karena akurat dan fleksibel. Jika kalian hanya perlu angka kasar dalam detik/jam, strtotime() sudah cukup. Pastikan zona waktu konsisten supaya hasil tidak bias. Sekian artikel dari kodelyly.com, semoga membantu kalian menghitung selisih waktu dengan PHP secara tepat dan elegan!