UNPKG

ilib

Version:

iLib is a cross-engine library of internationalization (i18n) classes written in pure JS

1 lines 3.7 kB
var ilib=require("./ilib.js"),MathUtils=require("./MathUtils.js"),Calendar=require("./Calendar.js"),Astro=require("./Astro.js"),RataDie=require("./RataDie.js"),GregorianDate=require("./GregorianDate.js"),GregRataDie=require("./GregRataDie.js"),HanCal=function(params){this.type="han";var sync=!params||"boolean"!=typeof params.sync||params.sync;Astro.initAstro(sync,params&&params.loadParams,ilib.bind(this,function(x){params&&"function"==typeof params.onLoad&&params.onLoad(this)}))};HanCal._getElapsedYear=function(year,cycle){var elapsedYear=year||0;return void 0!==year&&year<61&&void 0!==cycle&&(elapsedYear=60*cycle+year),elapsedYear},HanCal._hanNextSolarLongitude=function(jd,longitude){var tz=HanCal._chineseTZ(jd),uni=Astro._universalFromLocal(jd,tz),sol=Astro._nextSolarLongitude(uni,longitude);return Astro._localFromUniversal(sol,tz)},HanCal._majorSTOnOrAfter=function(jd){var tz=HanCal._chineseTZ(jd),uni=Astro._universalFromLocal(jd,tz),next=Astro._fixangle(30*Math.ceil(Astro._solarLongitude(uni)/30));return HanCal._hanNextSolarLongitude(jd,next)},HanCal._solsticeBefore=function(year,cycle){var elapsedYear=HanCal._getElapsedYear(year,cycle),rd=new GregRataDie({year:elapsedYear-2697-1,month:12,day:15,hour:0,minute:0,second:0,millisecond:0});return HanCal._majorSTOnOrAfter(rd.getRataDie()+RataDie.gregorianEpoch)},HanCal._chineseTZ=function(jd){return GregorianDate._calcYear(jd-RataDie.gregorianEpoch)<1929?465.6666666666667:480},HanCal._newMoonOnOrAfter=function(jd){var tz=HanCal._chineseTZ(jd),uni=Astro._universalFromLocal(jd,tz),moon=Astro._newMoonAtOrAfter(uni);return Astro._floorToJD(Astro._localFromUniversal(moon,tz))},HanCal._newMoonBefore=function(jd){var tz=HanCal._chineseTZ(jd),uni=Astro._universalFromLocal(jd,tz),moon=Astro._newMoonBefore(uni);return Astro._floorToJD(Astro._localFromUniversal(moon,tz))},HanCal._leapYearCalc=function(year,cycle){var ret={elapsedYear:HanCal._getElapsedYear(year,cycle)};return ret.solstice1=HanCal._solsticeBefore(ret.elapsedYear),ret.solstice2=HanCal._solsticeBefore(ret.elapsedYear+1),ret.m1=HanCal._newMoonOnOrAfter(Astro._ceilToJD(ret.solstice1)),ret.m2=HanCal._newMoonBefore(Astro._ceilToJD(ret.solstice2)),ret},HanCal._currentMajorST=function(jd){var s=Astro._solarLongitude(Astro._universalFromLocal(jd,HanCal._chineseTZ(jd)));return MathUtils.amod(2+Math.floor(s/30),12)},HanCal._noMajorST=function(jd){return HanCal._currentMajorST(jd)===HanCal._currentMajorST(HanCal._newMoonOnOrAfter(jd+1))},HanCal.prototype.getNumMonths=function(year,cycle){return this.isLeapYear(year,cycle)?13:12},HanCal.prototype.getMonLength=function(month,year){var calc=HanCal._leapYearCalc(year),priorNewMoon=HanCal._newMoonOnOrAfter(calc.m1+29*month);return HanCal._newMoonOnOrAfter(priorNewMoon+1)-priorNewMoon},HanCal.prototype.equivalentCycleYear=function(year){var y=year-(0<=year?474:473);return MathUtils.mod(y,2820)+474},HanCal.prototype.isLeapYear=function(year,cycle){var calc=HanCal._leapYearCalc(year,cycle);return 12===Math.round((calc.m2-calc.m1)/29.530588853)},HanCal.prototype.getLeapMonth=function(year,cycle){var calc=HanCal._leapYearCalc(year,cycle);if(12!=Math.round((calc.m2-calc.m1)/29.530588853))return-1;for(var month=0,m=HanCal._newMoonOnOrAfter(calc.m1+1);!HanCal._noMajorST(m);)month++,m=HanCal._newMoonOnOrAfter(m+1);return month},HanCal.prototype.newYears=function(year,cycle){var calc=HanCal._leapYearCalc(year,cycle),m2=HanCal._newMoonOnOrAfter(calc.m1+1);return 12===Math.round((calc.m2-calc.m1)/29.530588853)&&(HanCal._noMajorST(calc.m1)||HanCal._noMajorST(m2))?HanCal._newMoonOnOrAfter(m2+1):m2},HanCal.prototype.getType=function(){return this.type},Calendar._constructors.han=HanCal,module.exports=HanCal;