this-month
Version:
Utility library to get details about an specific month.
90 lines (70 loc) • 2.09 kB
JavaScript
;
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;
}