I'm making a calendar generator in JavaScript. I need the Unix Timestamp for easter day midnight, for a given year. Can anyone tell me how I need to do that (in JavaScript)?
Thanks in advance.
PHP's function can be found here: http://www.php.net/easter_date
According to this:-
function Easter(Y) {
var C = Math.floor(Y/100);
var N = Y - 19*Math.floor(Y/19);
var K = Math.floor((C - 17)/25);
var I = C - Math.floor(C/4) - Math.floor((C - K)/3) + 19*N + 15;
I = I - 30*Math.floor((I/30));
I = I - Math.floor(I/28)*(1 - Math.floor(I/28)*Math.floor(29/(I + 1))*Math.floor((21 - N)/11));
var J = Y + Math.floor(Y/4) + I + 2 - C + Math.floor(C/4);
J = J - 7*Math.floor(J/7);
var L = I - J;
var M = 3 + Math.floor((L + 40)/44);
var D = L + 28 - 31*Math.floor(M/4);
return padout(M) + '.' + padout(D);
}
function padout(number) { return (number < 10) ? '0' + number : number; }
Example usage:-
document.write(Easter(1997));
Have a look at the PHP source code to see how they calculate theirs and replicate in JavaScript?
Here's an alternative method based on an algorithm that R. Sivaraman adapted for the Gregorian Calendar from an algorithm originally developed by J. Meeus for the Julian calendar (cf. https://en.wikipedia.org/wiki/Computus).
It seems like a more elegant and intuitive solution than the Gauss algorithm which has already been mentioned. At least it shaves off a few steps (only 5 total plus the JS date methods) and uses fewer variables (only 4 total plus the month, date, and year).
function computus( y ) {
var date, a, b, c, m, d;
// Instantiate the date object.
date = new Date;
// Set the timestamp to midnight.
date.setHours( 0, 0, 0, 0 );
// Set the year.
date.setFullYear( y );
// Find the golden number.
a = y % 19;
// Choose which version of the algorithm to use based on the given year.
b = ( 2200 <= y && y <= 2299 ) ?
( ( 11 * a ) + 4 ) % 30 :
( ( 11 * a ) + 5 ) % 30;
// Determine whether or not to compensate for the previous step.
c = ( ( b === 0 ) || ( b === 1 && a > 10 ) ) ?
( b + 1 ) :
b;
// Use c first to find the month: April or March.
m = ( 1 <= c && c <= 19 ) ? 3 : 2;
// Then use c to find the full moon after the northward equinox.
d = ( 50 - c ) % 31;
// Mark the date of that full moon—the "Paschal" full moon.
date.setMonth( m, d );
// Count forward the number of days until the following Sunday (Easter).
date.setMonth( m, d + ( 7 - date.getDay() ) );
// Gregorian Western Easter Sunday
return date;
}
For example:
console.log( computus( 2016 ) ); // Date 2016-03-27T05:00:00.000Z
Here's one implementation. Can't vouch for it's accuracy.
http://users.sa.chariot.net.au/~gmarts/eastalg.htm#easterscript