Penawaran Engine Reservasi Tiket Pesawat

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


Jual kaos

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 -


 

Komentar Anda ...