Dapatkan CD MP3 Murottal Al Qur'an dan Terjemahnya. Satu-satunya di Indonesia!!
Ingin Punya Script SMS Gateway dengan PHP + MySQL?

Dapatkan segera phpSMS V3.0, software SMS Gateway multi fungsi berbasis web buatan saya sendiri untuk keperluan Anda.
[Info Lengkap...]

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


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

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.

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)

Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?



Beberapa artikel terkait


Share this article on:

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 20 komentar dalam artikel ini.

  1. mashardi says:

    baru tau nih, makasih pak

  2. lia says:

    thanks pak atas artikelnya. Sangat membantu sekali.

  3. rosihanari says:

    @lia: thanks juga atas comment nya ya mbak Lia

  4. mgman says:

    Ass pak rosihanari.

    Bagaimana kalau kita mau menampilkan tanggal per periode…misalnya kalau kita mao menampilkan tanggal antara 10 Januari 2008 s/d 10 Februari 2008….atau 23 Desember 2008 s/d 5 Januari 2009.

    Terimakasih banyak sebelum dan sesudahnya pak

    Wassalam.

  5. rosihanari says:

    @mgman: mmm… menarik sekali kasusnya mas. nanti saya coba membahasnya di artikel blog ini ya mas. Doakan saya mampu OK?

  6. mgman says:

    Ass

    Yo Pak ditunggu kabar baiknya

    Terimakasih

    Wassalam

  7. mgman says:

    Ass

    Terimakasih sebelum dan sesudahnya pak…sudah bisa terpecahkan dan ok pak.

    Wassalam

  8. nubitol says:

    mas, kalau yang hitung jam ada tutorialnya ga???misalnya, tgl 20 Nov 2009 saya bekerja dari jam 8 pagi sampai 10 malem, lalu pada tanggal 21 nov saya kerja jam 8 pagi sampai 5 sore. Cara hitungnya dong mas…
    buat tugas nie…
    maaf, masih nubitol…


    suasana ujian yang aneh…

    .-= nubitol´s last blog ..Tugas Information Retrieval-Kategori 2 =-.

  9. rosihanari says:

    @nubitol: mmm.. kalo seperti itu anda harus pake tipe data ‘DATETIME’ (Tanggal dan Jam), nanti ada perintah SQL untuk menghitung selang waktu antar keduanya.

  10. Indra says:

    ni dia yang aku cari
    maksih mas

  11. Bagas Ogake says:

    Siang mas. Bagaimana cara menampilkan nilai siswa yang terdiri dari beberapa kriteria. Nilai siswa tersebut berdasarkan Standar Kompetensi (SK) dan Nilai Ke-n (NK).
    Contoh:
    NIS Std. Kompetensi Nilai ke-n NILAI
    =======================================
    001 SK1 NK1 80
    001 SK1 NK2 70
    001 SK2 NK1 75
    001 SK2 NK2 90

    Bagaimana cara menampilkan seperti di bawah ini:

    NIS Std. Kompetensi
    =========================================
    SK1 SK2 RATA-RATA
    NK1 NK2 NK1 NK2
    001 80 70 75 90 ……

    Terima kasih.

  12. alfine says:

    Ass, Kalo penggunaan view dan triger dalam database digunakan sebgai apa , dan bagaimana penerapananya dalam program php

  13. yoyon says:

    Pak minta bimbingannya seumpama kalau taggal nya di ambil dari database mysql gimana scriptnya……
    TQ.

  14. biah says:

    mas… mau minta tolong banget neh..

    gmn untung membuat tampilan tanngal yang otomatis gituh….

    jadi ketika kita pilih tahuunya… dia akan lgsg ada format tanggal n bulanya… misalna pd tahun 2010 februari tgl nya cuma ada 28 dan jatuh pada hari apaaa gituh..
    tolong mhon yah mas..
    terima kasih,,.,

  15. nonosa says:

    Gimana caranya kalau kita mau menentukan denda peminjaman buku perpustkaan berdasarkan tanggal….

  16. rosihanari says:

    @nonosa: pertama Anda harus cari dulu selisih hari antara tanggal pengembalian dengan tanggal harus kembali. Tanggal harus kembali kan mestinya tercatat sewaktu transaksi peminjaman kan? nah… dari selisih itu baru Anda kalikan dengan jumlah denda perhari.

  17. sendy nuari says:

    Pak,sebelumya,tios sangat membantu sekali, nah saya ada masalah dengan klo tanggal yg dikurangin lebih kecil, di artikel dijelaskan memakai fungsi abs() itu bagaimana pak ??mohon bantuanya,,terimakasih

  18. rosihanari says:

    @sendy nuari: abs() itu digunakan untuk menghilangkan tanda negatif atau minus.

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

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



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

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

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word