12

JavaScriptでカレンダージェネレーターを作っています。特定の年のイースターの真夜中の Unix タイムスタンプが必要です。どうすれば(JavaScriptで)それを行うことができますか?

PHP の関数はここにあります。

4

5 に答える 5

24

これによると:-

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; }

使用例:-

document.write(Easter(1997));
于 2009-08-16T13:48:23.247 に答える
2

「Laurent Longre」アルゴリズムの使用

以下は、Laurent Longre アルゴリズムに基づいています。

1583 年 (グレゴリオ暦の開始) から機能します。

出力は の形式の配列です[year, month, day]

//===========================================================
function easterDateLLongre(Y) {
  let M=3, G= Y % 19+1, C= ~~(Y/100)+1, L=~~((3*C)/4)-12,
      E=(11*G+20+ ~~((8*C+5)/25)-5-L)%30, D;
  E<0 && (E+=30);
  (E==25 && G>11 || E==24) && E++;
  (D=44-E)<21 && (D+=30);
  (D+=7-(~~((5*Y)/4)-L-10+D)%7)>31 && (D-=31,M=4);
  return [Y, M, D];
  }
//===========================================================


//======================= Tests =====================
console.log(easterDateLLongre(1583)); // [1583, 4, 10]
console.log(easterDateLLongre(1853)); // [1853, 3, 27]
console.log(easterDateLLongre(2021)); // [2021, 4, 4]
console.log(easterDateLLongre(2700)); // [2700, 4, 1]

于 2021-02-13T13:11:07.790 に答える