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