Logo
© 2019 - 2026 SantriKoding.

On This Page

Mobile navigation

1
0
1
SHARE

Cara Menghitung Selisih Tanggal di PHP

like emoticon 0
love emoticon 1
insightful emoticon 0
fire emoticon 0
cheer emoticon 0
celebrate emoticon 0
Cara Menghitung Selisih Tanggal di PHP

Halo teman-teman semuanya, dalam pembuatan aplikasi, kita hampir pasti membutuhkan fitur yang berhubungan dengan tanggal. Contohnya untuk jadwal, masa aktif (expired), laporan analitik, sampai validasi berbasis waktu. Untungnya, PHP sudah menyediakan cara yang rapi dan akurat untuk menghitung selisih dua tanggal dengan memanfaatkan DateTime, DateInterval, dan juga timestamp.

Pada artikel ini, kita akan mempelajari cara menghitung selisih tanggal di PHP dalam berbagai satuan, mulai dari hari, jam, menit, bulan, tahun, detik, hingga menghitung selisih waktu dari tanggal “sekarang”.

Konsep Dasar: DateTime dan Method diff()

Di PHP, DateTime digunakan untuk merepresentasikan sebuah titik waktu tertentu. Untuk membandingkan dua tanggal, kita bisa menggunakan method diff(). Method ini akan mengembalikan objek DateInterval yang berisi informasi detail tentang selisih waktu tersebut.

Di dalam DateInterval, kita dapat mengakses properti seperti y (tahun), m (bulan), d (hari), h (jam), i (menit), s (detik), serta days yang merepresentasikan total selisih hari.

Contoh penggunaannya sebagai berikut:

<?php

$date1 = new DateTime('2024-01-01');
$date2 = new DateTime('2024-02-10');

$interval = $date1->diff($date2);

echo $interval->days;

Kode di atas membandingkan dua tanggal menggunakan diff(). Properti days akan mengembalikan total selisih hari secara keseluruhan, bukan hanya sisa hari di bulan tertentu. Cara ini sudah calendar-aware, sehingga aman terhadap perbedaan jumlah hari per bulan dan tahun kabisat.

Menghitung Selisih dalam Hari

Cara paling sederhana untuk menghitung selisih hari adalah dengan memanfaatkan properti days dari DateInterval.

<?php

$date1 = new DateTime('2024-01-01');
$date2 = new DateTime('2024-01-20');

$days = $date1->diff($date2)->days;

echo $days;

Dengan memanggil ->days, kita langsung mendapatkan total selisih hari antara dua tanggal tanpa perlu perhitungan tambahan.

Sebagai alternatif, kita juga bisa menggunakan timestamp jika hanya membutuhkan selisih hari berdasarkan durasi waktu murni.

<?php

$seconds = abs(strtotime('2024-01-01') - strtotime('2024-01-20'));
$days    = intdiv($seconds, 86400);

echo $days;

Pendekatan ini mengubah tanggal menjadi detik, lalu membaginya dengan jumlah detik dalam satu hari (86400). Cara ini cocok untuk kebutuhan sederhana, namun tidak mempertimbangkan kalender secara detail.

Menghitung Selisih dalam Jam

Saat menggunakan DateInterval, mengambil nilai jam (h) saja tidak cukup jika selisih waktunya lebih dari satu hari. Oleh karena itu, kita perlu menggabungkan total hari dan jam.

<?php

$date1 = new DateTime('2024-01-01 00:00');
$date2 = new DateTime('2024-01-02 05:00');

$diff  = $date1->diff($date2);
$hours = $diff->days * 24 + $diff->h;

echo $hours;

Kode ini mengalikan total hari dengan 24 jam, lalu menambahkan sisa jamnya. Dengan cara ini, kita mendapatkan total jam secara akurat.

Versi timestamp juga bisa digunakan:

<?php

$seconds = abs(strtotime('2024-01-01 00:00') - strtotime('2024-01-02 05:00'));
$hours   = intdiv($seconds, 3600);

echo $hours;

Pendekatan ini lebih ringkas dan cocok untuk menghitung durasi jam murni tanpa mempertimbangkan konteks kalender.

Menghitung Selisih dalam Bulan

Untuk menghitung selisih bulan, DateInterval menyediakan properti y (tahun) dan m (bulan).

<?php

$date1 = new DateTime('2023-01-01');
$date2 = new DateTime('2024-04-01');

$diff   = $date1->diff($date2);
$months = $diff->y * 12 + $diff->m;

echo $months;

Dengan mengalikan jumlah tahun dengan 12 lalu menambahkan bulan, kita mendapatkan total selisih bulan secara akurat. Cara ini jauh lebih aman dibandingkan membagi jumlah hari, karena tiap bulan memiliki jumlah hari yang berbeda.

Menghitung Selisih dalam Detik

Untuk satuan detik, pendekatan timestamp adalah pilihan paling sederhana.

<?php

$seconds = abs(strtotime('2024-01-01 12:00') - strtotime('2024-01-01 12:10'));

echo $seconds;

Kode ini langsung menghasilkan selisih detik antara dua waktu, cocok untuk kebutuhan durasi yang sangat presisi.

Menghitung Selisih dalam Tahun

Jika kita hanya membutuhkan selisih tahun, kita bisa langsung mengambil properti y dari DateInterval.

<?php

$date1 = new DateTime('2020-02-29');
$date2 = new DateTime('2024-02-28');

$years = $date1->diff($date2)->y;

echo $years;

PHP secara otomatis menangani tahun kabisat, sehingga hasilnya tetap akurat meskipun tanggalnya berada di akhir Februari.

Menghitung Selisih dari Sekarang (From Now)

Sering kali kita perlu menghitung jarak waktu dari hari ini menuju tanggal tertentu.

<?php

$target      = new DateTime('2024-12-25');
$now         = new DateTime();
$daysFromNow = $now->diff($target)->days;

echo $daysFromNow;

Kode ini sangat berguna untuk fitur countdown, pengingat, atau estimasi waktu ke depan.

Menghitung Selisih dalam Menit

Versi timestamp:

<?php

$seconds = abs(strtotime('2024-01-01 12:00') - strtotime('2024-01-01 12:45'));
$minutes = intdiv($seconds, 60);

echo $minutes;

Pendekatan ini menghitung total menit berdasarkan selisih detik.

Versi DateInterval:

<?php

$diff    = (new DateTime('12:00'))->diff(new DateTime('12:45'));
$minutes = $diff->h * 60 + $diff->i;

echo $minutes;

Kita mengonversi jam ke menit lalu menambahkan sisa menit untuk mendapatkan total menit secara akurat.

Format Gabungan: Jam dan Menit Sekaligus

Jika kita ingin output yang rapi tanpa perhitungan manual, kita bisa memanfaatkan method format().

<?php

$date1 = new DateTime('2024-01-01 08:00');
$date2 = new DateTime('2024-01-01 12:45');

echo $date1->diff($date2)->format('%h hours %i minutes');

Method format() memudahkan kita menampilkan selisih waktu dalam format yang mudah dibaca.

Alternatif manual:

<?php

$seconds      = abs(strtotime('08:00') - strtotime('12:45'));
$totalMinutes = intdiv($seconds, 60);

$hours   = intdiv($totalMinutes, 60);
$minutes = $totalMinutes % 60;

echo $hours . ' hours ' . $minutes . ' minutes';

Pendekatan ini memberi kita fleksibilitas penuh untuk mengatur format output sesuai kebutuhan.

Rekomendasi Terbaik

Dalam praktik sehari-hari, gunakan DateTime + diff() untuk perhitungan yang bergantung pada kalender seperti bulan, tahun, dan perbandingan tanggal.

Sementara itu, timestamp lebih cocok untuk menghitung durasi waktu murni seperti detik, menit, dan jam. Untuk tampilan output yang lebih manusiawi, manfaatkan method format() dari DateInterval.

Kesimpulan

Menghitung selisih tanggal di PHP sebenarnya tidaklah rumit jika kita memahami alat yang tepat. DateTime dan DateInterval adalah pilihan paling aman dan fleksibel karena sudah memperhitungkan aturan kalender secara otomatis. Sementara itu, timestamp tetap berguna untuk kebutuhan durasi sederhana yang berbasis detik.

Dengan memahami perbedaan keduanya, kita bisa memilih pendekatan yang paling sesuai dengan kebutuhan aplikasi dan menghindari kesalahan perhitungan waktu di kemudian hari.

Terima Kasih

Blog ini dibaca sebanyak 702 kali

Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CEO & Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komentar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

Memuat komentar...