Jumlah hari diantara dua tanggal
28 September 2012 Tinggalkan komentar
Tulisan ini adalah jawaban dari pertanyaan Restu Herwanto dari tulisan jQuery UI datepicker, disable hari libur, menghitung jumlah hari diantara dua tanggal dengan mengeluarkan hari sabtu dan minggu dari perhitungan tersebut.
Yang kita perlukan dari function ini adalah tanggal mulai (start date) dan tanggal selesai (end date), dengan argument opsional array hari libur dan array hari yang dikeluarkan dari perhitungan (jika ingin mendefinisikan hari lain yang dikeluarkan dari perhitungan selain default hari sabtu dan minggu.
function countDays(start, end /* [, holiday [, excludeDays]] */) { // 3rd argument is array of holiday if (arguments.length >= 3) { var holiday = arguments[2]; // convert to timestamp holiday = holiday.map( function(value, index, array) { return value.getTime(); }); } else { var holiday = []; } // 4th argument is array of exclude days, default are Sunday and Saturday if (arguments.length >= 4) { var excludeDays = arguments[3]; } else { var excludeDays = [ 0, // Sunday 6 // Saturday ]; } // milisecond per day var oneDay = 1000 * 24 * 60 *60; // different of start and end day var diff = Math.ceil((end.getTime() - start.getTime()) / oneDay); // count days var days = 0; for (var i = 0; i <= diff; i++) { // current date var now = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i); // flag count the day or not var isCount = true; // exclude holiday if (holiday.indexOf(now.getTime()) > -1) { isCount = false; } // exclude days if (excludeDays.indexOf(now.getDay()) > -1) { isCount = false; } if (isCount) { days++; } } return days; }
Untuk testing kita menggunakan tanggal 22 Oktober 2012 dan tanggal 31 Oktober 2012, diantara tanggal tersebut ada tanggal 26 Oktober 2012 yang merupakan hari libur nasional Idul Adha 1433 H
var start = new Date(2012, 9, 22); // 22 oct 2012 var end = new Date(2012, 9, 31); // 31 oct 2012 var holiday = [ new Date(2012, 9, 26) // Idul Adha 1433 H ]; var excludeDays = [1, 2, 3]; // monday, tuesday, wednesday // normal var days = countDays(start, end); console.log(days); // exclude holiday var days = countDays(start, end, holiday); console.log(days); // exclude holiday and defined day var days = countDays(start, end, holiday, excludeDays); console.log(days);
catatan: untuk menggunakan function countDays
di atas, browser harus support Array.prototype.map() dan Array indexOf method