UNPKG

this-month

Version:

Utility library to get details about an specific month.

90 lines (70 loc) 2.09 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.numberOfSpecificDay = numberOfSpecificDay; exports.getDaysOff = getDaysOff; exports.isValidHolidayFormat = isValidHolidayFormat; exports.getHolidays = getHolidays; var daysMap = exports.daysMap = { sunday: 0, monday: 1, tuesday: 2, wednesday: 3, thursday: 4, friday: 5, saturday: 6 }; function numberOfSpecificDay(options) { var month = options.month - 1; var daysCounter = 0; var day = 1; var date = new Date(options.year, month, day); // day 1 while (date.getMonth() === month) { if (date.getDay() === options.day) { // 0 = sunday, 1 = monday, 2 = tuesday, etc daysCounter += 1; } day += 1; date = new Date(options.year, month, day); } return daysCounter; } function getDaysOff() { var daysOff = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; if (daysOff.length < 1) { return [0, 6]; // sunday and saturday } var definedDaysOff = []; for (var i = 0; i < daysOff.length; i += 1) { var dayName = daysOff[i].toLowerCase(); var dayNumber = daysMap[dayName]; if (!dayNumber) throw new Error('Invalid day name.'); definedDaysOff.push(dayNumber); } return definedDaysOff; } function isValidHolidayFormat(dateString) { var regEx = /^\d{4}-\d{2}-\d{2}$/; if (!dateString.match(regEx)) return false; // Invalid format var d = new Date(dateString); if (!d.getTime() > 0) { // Invalid Date (or this could be epoch) // d.getTime() === NaN // the date object returns Invalid Date return false; } return d.toISOString().slice(0, 10) === dateString; } function getHolidays() { var holidays = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var validatedDates = []; for (var i = 0; i < holidays.length; i += 1) { var isValid = isValidHolidayFormat(holidays[i]); if (!isValid) { throw new Error(holidays[i] + ' is not in the correct format'); } validatedDates[i] = holidays[i]; } return validatedDates; }