• Home
  • /
  • PHP
  • /
  • Menghitung Jumlah Hari Minggu Antara Dua Tanggal
PHP

Menghitung Jumlah Hari Minggu Antara Dua Tanggal

 

Ada salah satu pertanyaan dari salah satu pengunjung blog ini yang agak nyeleneh namun asyik bila direnungkan cara mencari solusinya. Pertanyaannya adalah: “Bagaimana cara menghitung jumlah hari minggu antara dua buah tanggal?“. Pertanyaan tersebut muncul karena yang bersangkutan ingin membuat sistem untuk mencari jumlah total denda yang dihitung harian kecuali hari minggu. Asyik bukan pertanyaannya? 🙂

Anda pusing memikirkan solusinya? jangan menyerah kawan karena di dalam programming ada 1001 jalan menuju solusi yang diharapkan. Ah.. sok tahu nih yang nulis !! he … 3x. Eh.. tapi bener kok, untuk mencari solusi programming itu sebenarnya mudah, Anda sendirilah yang menganggapnya sulit. Jika image Anda terhadap programming sudah dianggap sulit, maka seterusnya akan Anda anggap sulit. Konsep pemilihan algoritma untuk mencari solusi pada suatu kasus pada prinsipnya sederhana, dan jangan memikirkan yang rumit dan terlalu muluk-muluk dulu.

OK.. Stop berteori ! sekarang saatnya praktik dan membuktikan apakah solusi kasus di atas benar-benar mudah.

Misalkan kita memiliki dua buah tanggal, katakanlah A dan B. Selanjutnya kita ingin mencari jumlah hari minggu di antara kedua tanggal tersebut. Apa ide Anda? Kalau ide saya, saya akan mengecek hari pada setiap tanggal di antara kedua tanggal. Setiap kali ditemukan hari suatu tanggal adalah hari Minggu, maka counter untuk menghitung jumlah hari minggu akan bertambah 1.

Contoh Kasus:

Misalkan kita akan menghitung jumlah hari minggu antara tanggal 01-01-2010 s/d 31-01-2010. Untuk menghitung jumlah hari minggu di antara kedua tanggal tersebut, mula-mula kita set jumlah hari Minggunya adalah 0 (karena kita belum menghitungnya). Selanjutnya kita mulai cek untuk tanggal 01-01-2010, apakah dia adalah hari Minggu? menurut kalender, tanggal tersebut adalah hari Jumat. Berarti jumlah hari Minggunya masih 0 karena belum dijumpai tanggal yang harinya Minggu. Berikutnya kita cek tanggal berikutnya yaitu 02-01-2010, apakah hari Minggu? ternyata bukan lagi. Barulah tanggal 03-01-2010 adalah hari Minggu. Berarti counter untuk hari Minggunya bertambah menjadi 1. Demikian seterusnya pengecekan ini dilakukan sampai dengan tanggal 31-01-2010. Setiap kali ditemukan tanggal dimana harinya adalah Minggu, maka counternya bertambah satu. Pada akhirnya kita akan dapatkan total jumlah hari Minggunya.

OK… demikian idenya. Selanjutnya, bagaimana implementasinya di script PHP? Implementasinya cukup mudah yaitu dengan menggunakan looping (perulangan). Permasalahan berikutnya adalah, bagaimana kita mengenerate tanggal-tanggal antara kedua tanggal, lalu mengecek hari setiap tanggal-tanggal yang dihasilkan? Inipun juga mudah, untuk mengenerate tanggal-tanggal tersebut kita gunakan function mktime(). Function ini nanti kita sisipkan di dalam loopingnya. Kapan looping ini berhenti? ya.. jika tanggal yang dihasilkan dari mktime() ini mencapai akhir tanggal yang menjadi batas kedua tanggal tersebut.

Trus.. bagaimana cara penggunaan function mktime()? OK.. ini saya kasih contohnya. Misalkan kita ingin mengenerate tanggal setelah 31-01-2010 (tanggal hari berikutnya) dengan menggunakan mktime(). Ini dia perintahnya:

<?php
echo date("d-m-Y", mktime(0, 0, 0, 1, 31+1, 2010));
?>

Bila perintah di atas dijalankan maka akan dihasilkan tanggal 01-02-2010. Perhatikan format tanggalnya yang dihasilkan oleh date("d-m-Y", mktime(...))

Sedangkan perintah di bawah ini untuk menghasilkan tanggal setelah 5 hari dari tanggal 31-01-2010.

<?php
echo date("d-m-Y", mktime(0, 0, 0, 1, 31+5, 2010));
?>

yang akan menghasilkan tanggal 05-02-2010.

Kemudian, bagaimana cara mengecek nama hari pada suatu tanggal di PHP? untuk mengecek nama hari dari suatu tanggal di PHP kita gunakan function date("w", mktime(...)). Function ini akan menghasilkan bilangan 0 s/d 6 yang merepresentasikan nama hari yaitu 0 : minggu, 1 : senin, 2 : selasa, … dst.

Ide penyelesaian sudah dapat, trus… cara mengenerate tanggal di antara dua buah tanggal serta mengetahui nama hari suatu tanggal juga sudah, so… kita bisa buat script PHP nya sekarang.

Ini dia scriptnya. Script ini akan menghitung jumlah hari Minggu antara tanggal 20-02-2010 s/d 20-04-2010, sekaligus menampilkan semua tanggalnya yang harinya Minggu.

<?php

$date1 = "20-02-2010";
$date2 = "20-04-2010";

// memecah bagian-bagian dari tanggal $date1
$pecahTgl1 = explode("-", $date1);

// membaca bagian-bagian dari $date1
$tgl1 = $pecahTgl1[0];
$bln1 = $pecahTgl1[1];
$thn1 = $pecahTgl1[2];

echo "<p>Tanggal yang merupakan hari minggu adalah:</p>";

// counter looping
$i = 0;

// counter untuk jumlah hari minggu
$sum = 0;

do
{
   // mengenerate tanggal berikutnya
   $tanggal = date("d-m-Y", mktime(0, 0, 0, $bln1, $tgl1+$i, $thn1));

   // cek jika harinya minggu, maka counter $sum bertambah satu, lalu tampilkan tanggalnya
   if (date("w", mktime(0, 0, 0, $bln1, $tgl1+$i, $thn1)) == 0)
   {
     $sum++;
     echo $tanggal."<br>";
   } 	 

   // increment untuk counter looping
   $i++;
}
while ($tanggal != $date2);   

// looping di atas akan terus dilakukan selama tanggal yang digenerate tidak sama dengan $date2.

// tampilkan jumlah hari Minggu
echo "<p>Jumlah hari minggu antara ".$date1." s/d ".$date2." adalah: ".$sum."</p>";

?>

Hasil output dari script di atas adalah sebagai berikut:

menghitung jumlah hari minggu - script PHP

OK mudah bukan membuatnya? Selamat mencoba dan semoga bermanfaat.

 

Bagikan artikel ini jika bermanfaat !

Assalaamu'alaikum.. aktivitas keseharian saya mengajar di Universitas Sebelas Maret, dengan matakuliah pemrograman dan basis data. Adapun bidang penelitian saya tentang computational thinking dan computer-aided learning.

Leave a Reply