Beberapa bulan yang lalu, saya pernah memposting artikel Cara Mencari Selisih Hari dari Dua Tanggal sebelumnya. Namun.. teknik yang saya gunakan pada artikel tersebut adalah dengan menggunakan query SQL yaitu dengan DATEDIFF()
. Kemudian hasil dari query tersebut ditampilkan pada script PHP sebagai output di browser.
Nah pada artikel kali ini saya akan coba paparkan bagaimana mencari
selisih hari dari 2 buah tanggal tapi hanya menggunakan script PHP saja (pure PHP) tanpa menggunakan query SQL.
Konsep dasar untuk menghitung selisih hari dengan PHP, sebenarnya cukup mudah yaitu dengan memanfaatkan function GregorianToJD()
.
Wihh…. function apaan tuh? kok belum pernah denger sebelumnya? Kalau
belum pernah dengar, function tersebut digunakan untuk mencari Julian Day Number (JDN)
dari sebuah tanggal. JDN adalah jarak waktu dalam satuan hari antara
suatu tanggal tertentu dengan tanggal 1 Januari 4713 SM (sebelum
masehi). Artikel lebih lanjut tentang cara menghitung JDN ini silakan
baca (Wikipedia).
Nah… sekarang kita manfaatkan JDN tersebut untuk menghitung selisih
hari dari 2 buah tanggal. Trus.. gimana caranya ya? OK… idenya begini:
misalkan kita punya 2 buah tanggal yaitu tanggal1
dan tanggal2
. JDN dari tanggal1
misalkan kita namakan JDN1
dan JDN dari tanggal2
kita namakan JDN2. Nah… selisih hari dari kedua tanggal cukup menghitung selisih nilai JDN1
dengan JDN2
.
Ilustrasi dari ide tersebut bisa dilihat di bawah ini
1.
o------------------o--------o
2.
a b c
3.
|------------------|--------|
4.
JDN1 n?
5.
|---------------------------|
6.
JDN2
a
itu adalah tanggal 1 Januari 4714 SM, b
adalah tanggal1
dan c
adalah tanggal2
nya. JDN1
adalah jarak dalam hari antara a
dan b
, sedangkan JDN2
adalah jarak dalam hari antara a
dan c
. Sehingga nilai n
(jarak atau selisih hari antara a
dan b
atau tanggal1
dan tanggal2
) dihitung menggunakan formula JDB2 - JDN1
. Nah… adapun sintaks penggunaan function
GregorianToJD()
ini adalah sbb:1.
GregorianToJD(month,
date
, year);
1.
GregorianToJD(1, 10, 2008);
Nah… sekarang saya coba tulis implementasi ide di atas untuk mencari selisih hari dari dua tanggal dengan ke dalam script PHP.
01.
02.
03.
$tgl1
=
"2009-10-01"
;
// 1 Oktober 2009
04.
$tgl2
=
"2009-10-10"
;
// 10 Oktober 2009
05.
06.
// memecah tanggal untuk mendapatkan bagian tanggal, bulan dan tahun
07.
// dari tanggal pertama
08.
09.
$pecah1
=
explode
(
"-"
,
$tgl1
);
10.
$date1
=
$pecah1
[2];
11.
$month1
=
$pecah1
[1];
12.
$year1
=
$pecah1
[0];
13.
14.
// memecah tanggal untuk mendapatkan bagian tanggal, bulan dan tahun
15.
// dari tanggal kedua
16.
17.
$pecah2
=
explode
(
"-"
,
$tgl2
);
18.
$date2
=
$pecah2
[2];
19.
$month2
=
$pecah2
[1];
20.
$year2
=
$pecah2
[0];
21.
22.
// menghitung JDN dari masing-masing tanggal
23.
24.
$jd1
= GregorianToJD(
$month1
,
$date1
,
$year1
);
25.
$jd2
= GregorianToJD(
$month2
,
$date2
,
$year2
);
26.
27.
// hitung selisih hari kedua tanggal
28.
29.
$selisih
=
$jd2
-
$jd1
;
30.
31.
echo
"Selisih kedua tanggal adalah "
.
$selisih
.
" hari"
;
32.
33.
?>
Keterangan: hasil selisih kedua tanggal tersebut bisa jadi negatif
ketika tanggal kedua lebih kecil dari tanggal pertama. Sehingga untuk
menangani hasil negatif ini, Anda bisa tambahkan function abs()
atau nilai mutlak atau absolute pada perhitungan selisihnya.
Oya.. tambahan lagi, Anda bisa mengubah format tanggalnya misalnya
tanggal dulu, bulan dan tahun (ex. 30-01-2009), tapi nanti pembacaan
masing-masing komponen tanggal, bulan dan tahunnya sebagai hasil dari explode()
juga berubah sesuai urutannya.
OK deh.. mudah-mudahan artikel ini berguna bagi Anda.
EmoticonEmoticon