Cara Mudah & Lebih Akurat Mencari Hasil Pengurangan Dua Tanggal di PHP

Anda mungkin cenderung menggunakan fungsi strtotime untuk mengurangkan dua tanggal. Kemudian membagi hasilnya dengan detik (detik dalam satu hari) untuk mencari berapa hari perbedaan dua tanggal tersebut. Cara ini kan menghasilkan nilai desimal, karena hasilnya belum tentu kelipatan 24 jam. Cara yang lebih akurat adalah menggunakan fungsi diff dari class DateTime.

Misalnya kita ingin melakukan megurangkan tanggal 10 September 2022 jam 10 dengan 2 September 2022 jam 11. Dengan menggunakan strtotime seperti di bawah hasilnya akan 7.9583.

$tanggal1 = strtotime("2022-09-10 10:00:00");
$tanggal2 = strtotime("2022-09-2 11:00:00");
echo ($tanggal1-$tanggal2)/86400;

Video Tutorial Mencari Hasil Pengurangan Dua Tanggal di PHP

Video Tutorial PHP Diff

Menggunakan Fungsi Diff dari DateTime class

Dengan menggunakan fungsi diff maka hasilnya akan lebih akurat. Fungsi diff dari class DateTime akan mengembalikan object DateInterval. Kemudian kita bisa menggunakan fungsi format untuk mendapatkan nilai interval tertentu. Fungsi format menerima input string format, misalnya %a untuk mendapatkan total hari, seperti contoh di bawah yang hasilnya adalah 7 hari.

$tanggal1 = new DateTime("2022-09-10 10:00:00");
$tanggal2 = new DateTime("2022-09-2 11:00:00");
$interval = $tanggal1->diff($tanggal2);
echo $interval->format('%a'); // hasil 7

Untuk mendapatkan nilai jamnya juga bisa gunakan kombinasi format %a %H seperti

echo $interval->format('%a hari %H jam');
// hasilnya 7 hari 23 jam

Berikut adalah semua format yang didukung oleh DateInterval:

Format Deskripsi
%Y Tahun, minimal 2 digit, jika kurang dari 10 akan ditambahkan 0 diawal
%y tahun, tanpa tambahan 0 diawal
%M bulan, minimal 2 digit, jika kurang dari 10 akan ditambahkan 0 diawal
%m bulan, tanpa tambahan 0 diawal
%D hari, minimal 2 digit, jika kurang dari 10 akan ditambahkan 0 diawal
%d hari, tanpa tambahan 0 diawal
%a jumlah total semua hari hasil dari fungsi diff
%H jam, minimal 2 digit, jika kurang dari 10 akan ditambahkan 0 diawal
%h jam, tanpa tambahan 0 diawal
%I (huruf kapital i) menit, minimal 2 digit, jika kurang dari 10 akan ditambahkan 0 diawal
%i menit, tanpa tambahan 0 diawal
%S detik, minimal 2 digit, jika kurang dari 10 akan ditambahkan 0 diawal
%s detik, tanpa tambahan 0 diawal
%F micro detik, minimal 6 digit, jika kurang dari 6 digit akan ditambahkan 0 diawal
%f micro detik, tanpa tambahan 0 diawal
%R simbol "-" jika hasil negatif dan "+" jika positif
%r simbol "-" jika hasil negatif dan kosong jika positif