ketr.photos/server/lib/pascha.js
James Ketrenos 182606db20 Added holiday picker
Signed-off-by: James Ketrenos <james_git@ketrenos.com>
2018-11-25 14:52:53 -08:00

108 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//! moment-holiday.js locale configuration
//! locale : pascha Related Holidays
//! author : Kodie Grantham : https://github.com/kodie
//(function() {
// var moment = (typeof require !== 'undefined' && require !== null) && !require.amd ? require('moment') : this.moment;
function init(moment) {
// moment.holidays.pascha = {
moment.modifyHolidays.add({
"Lent": {
date: 'pascha-46|pascha-3'
},
/*
"Holy Monday": {
date: 'pascha-6',
keywords_y: ['great', 'monday']
},
"Holy Tuesday": {
date: 'pascha-5',
keywords_y: ['great', 'tuesday']
},
"Holy Wednesday": {
date: 'pascha-4',
keywords_y: ['great', 'wednesday']
},
"Holy Thursday": {
date: 'pascha-3',
keywords_y: ['great', 'thursday']
},
"Holy Friday": {
date: 'pascha-2',
keywords_y: ['great', 'friday']
},
"Holy Saturday": {
date: 'pascha-1',
keywords_y: ['holy', 'saturday']
},
*/
"Pascha Sunday": {
date: 'pascha',
keywords_y: ['pascha'],
keywords: ['sunday']
},
"Bright Week": {
date: 'pascha+1|pascha+6'
},
"Pentecost Sunday": {
date: 'pascha+49',
keywords_y: ['pentecost'],
keywords: ['sunday']
},
//};
});
/**
* Calculates Easter in the Gregorian/Western (Catholic and Protestant) calendar
* based on the algorithm by Oudin (1940) from http://www.tondering.dk/claus/cal/easter.php
* @returns {array} [int month, int day]
*/
var pascha = function(year) {
var f = Math.floor,
// Golden Number - 1
G = year % 19,
C = f(year / 100),
// related to Epact
H = (C-f(C / 4) - f((8 * C + 13)/25) + 19 * G + 15) % 30,
// number of days from 21 March to the Paschal full moon
I = H - f(H/28) * (1 - f(29/(H + 1)) * f((21-G)/11)),
// weekday for the Paschal full moon
J = (year + f(year / 4) + I + 2 - C + f(C / 4)) % 7,
// number of days from 21 March to the Sunday on or before the Paschal full moon
L = I - J,
month = 3 + f((L + 40)/44),
day = L + 28 - 31 * f(month / 4);
return moment([year, (month - 1),day]);
}
moment.modifyHolidays.extendParser(function(m, date){
if (~date.indexOf('pascha')) {
var dates = date.split('|');
var ds = [];
for (var i = 0; i < dates.length; i++) {
if (dates[i].substring(0, 6) === 'pascha') {
var e = pascha(m.year());
if (dates[i].charAt(6) === '-') { e.subtract(dates[i].substring(7), 'days'); }
if (dates[i].charAt(6) === '+') { e.add(dates[i].substring(7), 'days'); }
if (dates.length === 1) { return e; }
ds.push(e.format('M/D'));
} else {
ds.push(dates[i]);
}
}
if (ds.length) { return ds.join('|'); }
}
});
console.log("Pascha initialized");
}
module.exports = init;
// if ((typeof module !== 'undefined' && module !== null ? module.exports : void 0) != null) { module.exports = moment; }
//}).call(this);