Free Ebook Tutorial from Rosihan Ari's Blog

Tutorial Javascript | Tutorial PHP | Tutorial AJAX | Tutorial CSS | Tutorial FPDF | Tutorial Wordpress | Tutorial Java SE


Ebook yang direkomendasikan untuk Anda
Ebook Panduan Praktis OOP di PHP


Mencari Selisih Hari dari Dua Buah Tanggal dengan PHP (Tanpa Query SQL)


October 14th, 2009 | by rosihanari | Cetak Artikel Cetak Artikel


GampSMS SMS Gateway

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

o------------------o--------o
a                  b        c
|------------------|--------|
       JDN1            n?
|---------------------------|
            JDN2

Dari ilustrasi tersebut, 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:

GregorianToJD(month, date, year);

Jadi misalkan kita ingin menghitung JDN dari tanggal 10/01/2008 (10 Januari 2008) adalah

GregorianToJD(1, 10, 2008);

Hasil dari function tersebut adalah 2454476 yang artinya bahwa selisih hari antara tanggal 1 Januari 4714 SM sampai 10 Januari 2008 adalah 2454476 hari.

Nah… sekarang saya coba tulis implementasi ide di atas untuk mencari selisih hari dari dua tanggal dengan ke dalam script PHP.

<?php

$tgl1 = "2009-10-01";  // 1 Oktober 2009
$tgl2 = "2009-10-10";  // 10 Oktober 2009

// memecah tanggal untuk mendapatkan bagian tanggal, bulan dan tahun
// dari tanggal pertama

$pecah1 = explode("-", $tgl1);
$date1 = $pecah1[2];
$month1 = $pecah1[1];
$year1 = $pecah1[0];

// memecah tanggal untuk mendapatkan bagian tanggal, bulan dan tahun
// dari tanggal kedua

$pecah2 = explode("-", $tgl2);
$date2 = $pecah2[2];
$month2 = $pecah2[1];
$year2 =  $pecah2[0];

// menghitung JDN dari masing-masing tanggal

$jd1 = GregorianToJD($month1, $date1, $year1);
$jd2 = GregorianToJD($month2, $date2, $year2);

// hitung selisih hari kedua tanggal

$selisih = $jd2 - $jd1;

echo "Selisih kedua tanggal adalah ".$selisih." hari";

?>

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.




Share ke Facebook Share ke Twitter
Baca Juga Artikel Terkait
Script PHP untuk Mencari Selisih Waktu dan Tanggal
Mencari Selisih Waktu dan Tanggal dengan SQL
Mengetahui Nama Hari pada Tanggal Tertentu dengan PHP
Mencari Jumlah Hari dalam Bulan Tertentu
Script PHP Mencari Usia Seseorang

Kata kunci: jarak hari - jarak tanggal - script php jarak dua hari - script php selisih hari - selisih dua tanggal - selisih tanggal tanpa sql - selisih waktu dua tanggal -


Ada 28 komentar dalam artikel ini.



  1. Fajri says:

    Pak saya sejauh ini saya sangat tertarik dengan artikel anda (terutama php),
    sya mau bertanya :
    bagaimana menghitung selisih hari tanpa menghitung hari minggu atau hari libur yang sudah di tentukan…
    mhn pencerahan..

    • rosihanari says:

      @fajri: untuk mengetahui jumlah hari minggu antara dua tanggal bisa dilihat di http://blog.rosihanari.net/menghitung-jumlah-hari-minggu-antara-dua-tanggal, lalu untuk mencari selisih hari antara dua tanggal tanpa hari minggu berarti cari selisih hari kedua hari, lalu kurangi lagi dengan jumlah hari minggu antara kedua tanggal. Tapi kalo hari libur, terlebih dahulu anda harus buat list tanggal hari libur dalam 1 tahun. Kalau hari libur kan bersifat lokal (hanya berlaku di Indonesia), tapi kalo hari minggu kan seluruh dunia sama oleh karena itu bisa dibuat otomatis dalam perhitungannya.

  2. Reza says:

    hello pak
    saya tertarik dengan artikel mengenai mencari selisih hari, ada yang mau saya tanyakan, bagaimana menghitung selisih hari antar bulan dalam satu tahun
    contoh :
    date1 = 2010-08-05
    today = 2010-10-14
    maka selisih hari antara bulan Januari 2010 sampai Juli 2010 = 0 hari
    bulan Agustus 2010 = 27 hari //31-5+1 (selisih hari + 1)
    bulan September 2010 = 30 hari
    bulan Oktober 2010 = 14 hari //today
    mohon bantuanya
    terimakasih

  3. yusep says:

    mantap..makasih banyak gan

  4. semmy says:

    wah mantap tipsnya :) tapi saya ada pertanyaan ni;
    Misal kita mau ngitung jumlah hari kerja dalam 1 bulan maka akan diabaikan hari libur atau tgl merah dan hari sabtu. itu gimana scripnya ya?
    Thax mas :)

  5. Mas, Mau tanya.. jika ada dua inputan tanggal misalnya tanggal invoice dan tanggal bayar. jika tanggal invoice dah ada ketika kita load halaman, kemudian kita masukan tanggal bayar, bagaimanakah script nya agar ketika tanggal bayar di input, maka selisih akan langsung muncul otomatis di iinputan dibawahnya tanpa harus menekan tombol apapun…
    terimakasih, dan mohon maaf merepotkan.. :)

  6. [...] hari dari dua tanggal di atas, saya menggunakan ide yang pernah saja jelaskan dalam artikel ‘mencari selisih hari dari dua tanggal‘ sedangkan untuk ide bagaimana mengenerate tanggal-tanggalnya saya ambil dari artikel [...]

  7. yow says:

    gan kalo untuk menghitung selisih hari dalam pengembalian buku perpustakaan penerapan fungsi date diff diletakkan dimana,,mohon bantuannya

  8. Just Smile says:

    Makasih Pak pencerahhannya :)



 

Komentar/pertanyaan Anda!

Mohon maaf, komentar/pertanyaan yang menggunakan email palsu atau komentar bernada negatif, cemooh, umpatan, cacian atau sejenisnya secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

Mohon maaf jika seandainya ada beberapa pertanyaan Anda yang tidak direspon atau ditanggapi mengingat banyaknya komentar yang masuk dan keterbatasan kemampuan/ilmu saya dalam menjawab pertanyaan satu persatu. Saya harap Anda bisa memahami dan memakluminya.

Semua komentar atau pertanyaan yg masuk tidak akan langsung tampil di halaman ini, karena akan dimoderasi dahulu.


*