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 Jumlah Selisih Hari Dari Dua Tanggal (Selain Hari Minggu dan Hari Libur)


July 1st, 2013 | by rosihanari | Cetak Artikel Cetak Artikel


GampSMS SMS Gateway

Masih terkait dengan topik tentang date processing atau pengolahan tanggal, artikel kali ini yang akan saya tulis adalah bagaimana cara mencari jumlah selisih hari dari dua tanggal, akan tetapi yang dihitung hanyalah tanggal-tanggal yang tidak termasuk hari minggu dan tanggal libur nasional. Mengapa hal ini penting dibahas? ya.. meskipun tampaknya sepele dan mudah membuatnya, tapi masalah ini penting bagi para programmer yang membuat program atau aplikasi terkait dengan pinjam meminjam barang. Salah satu contohnya adalah dalam aplikasi peminjaman perpustakaan. Pencarian jumlah selisih hari dari dua tanggal ini penting ketika akan menghitung denda harian keterlambatan pengembalian buku, yang mana terkadang hari libur atau hari minggu tidak dihitung dalam dendanya.

OK, dah paham kan kegunaannya? Nah sekarang kita fokus ke bagaimana cara pembuatan script PHP nya untuk mencari selisih hari tersebut. Untuk ide pembuatannya adalah sebagai berikut. Misalkan kita punya 2 buah tanggal, yaitu A dan B. Langkah pertama kita hitung terlebih dahulu selisih hari dari kedua tanggal, misalkan selisihnya adalah n hari. Tentu saja dalam n ini masih terdapat hitungan tanggal-tanggal merah atau hari minggunya. Kemudian langkah ke dua, kita generate tanggal-tanggal antara A dan B tersebut yang nantinya setiap tanggal tersebut dicek apakah termasuk hari Minggu atau tanggal merah. Jika ya, maka kita hitung totalnya ada berapa. Setelah kita hitung total tanggal-tanggal yang termasuk dalam hari Minggu atau tanggal merah/libur, misalkan m, selanjutnya tinggal kita kurangkan saja n-m untuk mendapatkan selisih hari selain hari minggu dan tanggal merahnya. Selesai :-)

Simpel kan idenya? sekarang kita implementasikan ide tersebut ke dalam bentuk program PHP. Berikut ini adalah contoh function selisihHari() yang saya buat berdasarkan ide di atas.

<?php
function selisihHari($tglAwal, $tglAkhir)
{
    // list tanggal merah selain hari minggu
    $tglLibur = Array("2013-01-04", "2013-01-05", "2013-01-17");

    // memecah string tanggal awal untuk mendapatkan
    // tanggal, bulan, tahun
    $pecah1 = explode("-", $tglAwal);
    $date1 = $pecah1[2];
    $month1 = $pecah1[1];
    $year1 = $pecah1[0];

    // memecah string tanggal akhir untuk mendapatkan
    // tanggal, bulan, tahun
    $pecah2 = explode("-", $tglAkhir);
    $date2 = $pecah2[2];
    $month2 = $pecah2[1];
    $year2 =  $pecah2[0];

    // mencari total selisih hari dari tanggal awal dan akhir
    $jd1 = GregorianToJD($month1, $date1, $year1);
    $jd2 = GregorianToJD($month2, $date2, $year2);

    $selisih = $jd2 - $jd1;

    // proses menghitung tanggal merah dan hari minggu
    // di antara tanggal awal dan akhir
    for($i=1; $i<=$selisih; $i++)
    {
        // menentukan tanggal pada hari ke-i dari tanggal awal
        $tanggal = mktime(0, 0, 0, $month1, $date1+$i, $year1);
        $tglstr = date("Y-m-d", $tanggal);

        // menghitung jumlah tanggal pada hari ke-i
        // yang masuk dalam daftar tanggal merah selain minggu
        if (in_array($tglstr, $tglLibur))
        {
           $libur1++;
        }

        // menghitung jumlah tanggal pada hari ke-i
        // yang merupakan hari minggu
        if ((date("N", $tanggal) == 7))
        {
           $libur2++;
        }
    }

    // menghitung selisih hari yang bukan tanggal merah dan hari minggu
    return $selisih-$libur1-$libur2;
}
?>

Keterangan:

Untuk menghitung total selisih 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 ‘menentukan n hari dari sebuah tanggal

Dalam script di atas, kita perlu mendaftar semua tanggal merah dan hari libur yang ada di kalender kita (kecuali hari minggu), karena di PHP tidak ada function untuk menentukan apakah suatu tanggal merupakan hari libur atau tidak, kecuali hari minggu. Untuk mengecek apakah suatu tanggal termasuk hari minggu atau tidak, kita bisa menggunakan syarat

if ((date("N", $tanggal) == 7))
{
   ...
}

karena function date(“N”, tanggal) itu akan menghasilkan suatu bilangan integer 1, 2, …, 7 dimana 1 menunjukkan Senin, 2 adalah Selasa, …, dan 7 adalah Minggu.

Dan berikut ini adalah contoh penggunaan function di atas untuk mencari jumlah hari antara tanggal 1 Januari 2013 dan 31 Januari 2013.

<?php

function selisihHari($tglAwal, $tglAkhir)
{
    // list tanggal merah selain hari minggu
    $tglLibur = Array("2013-01-04", "2013-01-05", "2013-01-17");

    // memecah string tanggal awal untuk mendapatkan
    // tanggal, bulan, tahun
    $pecah1 = explode("-", $tglAwal);
    $date1 = $pecah1[2];
    $month1 = $pecah1[1];
    $year1 = $pecah1[0];

    // memecah string tanggal akhir untuk mendapatkan
    // tanggal, bulan, tahun
    $pecah2 = explode("-", $tglAkhir);
    $date2 = $pecah2[2];
    $month2 = $pecah2[1];
    $year2 =  $pecah2[0];

    // mencari selisih hari dari tanggal awal dan akhir
    $jd1 = GregorianToJD($month1, $date1, $year1);
    $jd2 = GregorianToJD($month2, $date2, $year2);

    $selisih = $jd2 - $jd1;

    // proses menghitung tanggal merah dan hari minggu
    // di antara tanggal awal dan akhir
    for($i=1; $i<=$selisih; $i++)
    {
        // menentukan tanggal pada hari ke-i dari tanggal awal
        $tanggal = mktime(0, 0, 0, $month1, $date1+$i, $year1);
        $tglstr = date("Y-m-d", $tanggal);

        // menghitung jumlah tanggal pada hari ke-i
        // yang masuk dalam daftar tanggal merah selain minggu
        if (in_array($tglstr, $tglLibur))
        {
           $libur1++;
        }

        // menghitung jumlah tanggal pada hari ke-i
        // yang merupakan hari minggu
        if ((date("N", $tanggal) == 7))
        {
           $libur2++;
        }
    }

    // menghitung selisih hari yang bukan tanggal merah dan hari minggu
    return $selisih-$libur1-$libur2;
}

$tgl1 = "2013-01-01";
$tgl2 = "2013-01-31";

// output -> "Selisih hari dari tanggal 2013-01-01 dan 2013-01-31 adalah: 23 hari"
echo "Selisih hari dari tanggal ".$tgl1." dan ".$tgl2." adalah: ".selisihHari($tgl1, $tgl2)." hari";

?>

Catatan:

Dalam script di atas sengaja saya membuat format tanggalnya adalah YYYY-MM-DD karena seringkali data-data transaksi tersimpan dalam format tersebut di database MySQL.

OK mudah bukan membuatnya? Selama mencoba dan semoga bermanfaat.




Share ke Facebook Share ke Twitter
Baca Juga Artikel Terkait
Mencari Selisih Hari dari Dua Buah Tanggal dengan PHP (Tanpa Query SQL)
Menghitung Jumlah Hari Minggu Antara Dua Tanggal
Script PHP untuk Mencari Selisih Waktu dan Tanggal
Menentukan Nama Hari Pasaran Jawa Dari Tanggal Tertentu dengan PHP
Mencari Selisih Waktu dan Tanggal dengan SQL

Kata kunci: pengolahan tanggal - script tanggal php - selisih hari - selisih tanggal -


Ada 9 komentar dalam artikel ini.



  1. Fajar says:

    Terimakasih atas tutorialnya yang bermanfaat ini mas…

  2. Fajar says:

    Tanya mas!!!
    gimana code PHP untuk memisahkan angka
    contoh:
    ketika saya memasukan angka 12345 pada sebuah text area kemudian saya klik tombol “proses” maka akan tampil seperti :

    11,12,13,14,15
    21,22,23,24,25
    31,32,33,34,35
    51,52,53,54,55
    ============== ( tampilan 2 digit)

    111,112,113,114,115
    121,122,123,124,125 dst ..
    ============== ( tampilan 3 digit)

    1111,1112,1113,1114,1115 dst..
    ============== ( tampilan 4 digit)

    tolong di buat tutorialnyaa mas… terimaksih sebelumnya..

  3. saerozi says:

    mas rosi, tolong donk emailnya dibuka. Masak saya kirim email sudah tiga hari ndak dibalas. tak tunggu konfirmnya ya mas rozi.

  4. edi waluyo says:

    wah beruntungnya mahasiswa yg memperoleh Dosen seperti Pak Dosen Rosihan Ari ini, salut saya sama Bapak. Hormat GraaaKKK !!!

  5. Terimkasih ilmunya sangat membantu sekali bagi kami.

  6. tanya says:

    Mantap Pak, makasih.
    Pak, kalo misal “Tanggal Merah / Slaen Minggu” nya ngambil dari Database Bgaimana pak ?
    jadi User tidak merubah di Script Program, jika ada perubahan libur / ganti tahun, tapi user bisa menginput/ ubah List Hari libur (slaen Minggu)

  7. pak unyil says:

    keren mas tutorialnya



 

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.


*