LunarArray logic

基準[year, monthIndex, day]とbitwise dataから旧暦配列[year, month, day, days]を計算。

define Date.prototype

01. declare day
let d=(Date.UTC(this.getUTCFullYear(),this.getUTCMonth(),this.getUTCDate())-Date.UTC(v.year,v.monthIndex,v.day))/864e5

02. start loop(year)
if(-1<d)for(let y=0;y<v.data.length;y++){

03. declare leap, monthLength
const l=v.data[y]>>>13,mL=l?13:12

04. start loop(month)
for(let m=0;m<mL;m++){

05. declare days
const ds=29+(1&v.data[y]>>>m)

06. return
if(d<ds)return[y+v.year,m+(!l||l>m?1:l===m?.5:0),1+d,ds]

07. sub day
d-=ds

08. end loop(month)
}

09. end loop(year)
}

10. throw
throw Error()