6 javascript datetime unix-timestamp computus
我正在使用JavaScript制作日历生成器.对于给定的一年,我需要复活节当天午夜的Unix时间戳.任何人都可以告诉我如何做到这一点(在JavaScript中)?
提前致谢.
PHP的功能可以在这里找到:http://www.php.net/easter_date
Gav*_*our 18
根据这个: -
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; }
Run Code Online (Sandbox Code Playgroud)
用法示例: -
document.write(Easter(1997));
Run Code Online (Sandbox Code Playgroud)
这是一种基于算法的替代方法,R. Sivaraman 根据最初由 J. Meeus 为儒略历开发的算法(参见https://en.wikipedia.org/wiki/Computus)为公历改编了该算法。
与已经提到的高斯算法相比,这似乎是一种更优雅、更直观的解决方案。至少它减少了几个步骤(总共只有 5 个加上 JS日期方法)并使用更少的变量(总共只有 4 个加上月份、日期和年份)。
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;
}
Run Code Online (Sandbox Code Playgroud)
例如:
console.log( computus( 2016 ) ); // Date 2016-03-27T05:00:00.000Z
Run Code Online (Sandbox Code Playgroud)