finnish-holidays-js
Version:
A library for listing Finnish national holidays.
97 lines (85 loc) • 2.74 kB
JavaScript
var dateUtils = require('./date-utils');
/**
* Year constructor.
* @param {number} year
*/
function Year(year) {
if (year > 0) {
this.year = year;
this.holidays = {};
this.loadHolidays();
} else {
throw Error('Invalid year: ' + year);
}
}
/**
* Loads holidays.
*/
Year.prototype.loadHolidays = function() {
this.addHoliday(dateUtils.createDate(this.year, 1, 1), "New Year's Day");
this.addHoliday(dateUtils.createDate(this.year, 1, 6), 'Epiphany');
this.addHoliday(dateUtils.goodFriday(this.year), 'Good Friday');
this.addHoliday(dateUtils.easterSunday(this.year), 'Easter Sunday');
this.addHoliday(dateUtils.easterMonday(this.year), 'Easter Monday');
this.addHoliday(dateUtils.createDate(this.year, 5, 1), 'May Day');
this.addHoliday(dateUtils.ascensionDay(this.year), 'Ascension Day');
this.addHoliday(dateUtils.pentecost(this.year), 'Pentecost');
this.addHoliday(dateUtils.midsummerEve(this.year), 'Midsummer Eve'); // unofficial
this.addHoliday(dateUtils.midsummerDay(this.year), 'Midsummer Day');
this.addHoliday(dateUtils.allSaintsDay(this.year), "All Saints' Day");
this.addHoliday(dateUtils.createDate(this.year, 12, 6), 'Independence Day');
this.addHoliday(dateUtils.createDate(this.year, 12, 24), 'Christmas Eve'); // unofficial
this.addHoliday(dateUtils.createDate(this.year, 12, 25), 'Christmas Day');
this.addHoliday(dateUtils.createDate(this.year, 12, 26), "St. Stephen's Day");
};
/**
* Discards holidays falling on a weekend.
*/
Year.prototype.discardWeekends = function() {
var self = this;
var holidays = {};
Object.keys(self.holidays).forEach(function(month) {
if (self.holidays[month].length > 0) {
Object.keys(self.holidays[month]).forEach(function(i) {
var holiday = self.holidays[month][i];
if (!dateUtils.isWeekend(holiday.year, holiday.month, holiday.day)) {
if (typeof holidays[month] === 'undefined') {
holidays[month] = [];
}
holidays[month].push(holiday);
}
});
}
});
this.holidays = holidays;
};
/**
* Adds a holiday.
* @param {Date} date
* @param {string} description
*/
Year.prototype.addHoliday = function(date, description) {
var month = dateUtils.getMonth(date);
var year = dateUtils.getYear(date);
var day = dateUtils.getDay(date);
var holiday = {
year: year,
month: month,
day: day,
description: description
};
if (typeof this.holidays[month] === 'undefined') {
this.holidays[month] = [];
}
this.holidays[month].push(holiday);
};
module.exports = {
/**
* Creates a new year object.
* @param {number} year
* @return {Year}
*/
get: function(year) {
return new Year(year);
}
};