JavaScript で、カレンダーの祝日を得る関数を書く!

調べれば、春分の日秋分の日の計算式がのっている

function SHUNBUN (yy) {
  return new Date (yy, 2, floor (20.8431 + 0.242194 * (yy - 1980)) - floor ((yy - 1980) / 4));
}

function SHUUBUN (yy) {
  return new Date (yy, 9, floor (23.2488 + 0.242194 * (yy - 1980)) - floor ((yy - 1980) / 4));
}

簡略な式でも計算できるようだ。

function shunbun(y){
    if(y<1900||y>2099)return;
    switch(y%4){
        case 0:
            if(y<=1956)return 21;
            if(y<=2088)return 20;
            return 19;
        case 1:
            if(y<=1989)return 21;
            return 20;
        case 2:
            if(y<=2022)return 21;
            return 20;
        case 3:
            if(y<=1923)return 22;
            if(y<=2055)return 21;
            return 20;
    }
}

ここは、やっぱりセンス良く(?)書くべきか?

  function SHUNBUN (yy) {
    return new Date (yy, 2,
    [
      (y < 1957 ? 21 : y < 2089 ? 20 : 19),
      (y < 1990 ? 21 : 20),
      (y < 2023 ? 21 : 20),
      (y < 1924 > 22 : y < 2056 ? 21 : 20)
    ][y % 4] );
  }

時間があればもっと美しく!
これだと、内部で配列に置き換える作業を全部整えてから計算するので遅くなるかぁ。