UNPKG

ilib

Version:

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

1 lines 3.59 kB
var ilib=require("../index.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){return void 0!==year&&year<61&&void 0!==cycle?60*cycle+year:year||0},HanCal._hanNextSolarLongitude=function(jd,longitude){var tz=HanCal._chineseTZ(jd),jd=Astro._universalFromLocal(jd,tz),jd=Astro._nextSolarLongitude(jd,longitude);return Astro._localFromUniversal(jd,tz)},HanCal._majorSTOnOrAfter=function(jd){var tz=HanCal._chineseTZ(jd),tz=Astro._universalFromLocal(jd,tz),tz=Astro._fixangle(30*Math.ceil(Astro._solarLongitude(tz)/30));return HanCal._hanNextSolarLongitude(jd,tz)},HanCal._solsticeBefore=function(year,cycle){year=HanCal._getElapsedYear(year,cycle),cycle=new GregRataDie({year:year-2697-1,month:12,day:15,hour:0,minute:0,second:0,millisecond:0});return HanCal._majorSTOnOrAfter(cycle.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),jd=Astro._universalFromLocal(jd,tz),jd=Astro._newMoonAtOrAfter(jd);return Astro._floorToJD(Astro._localFromUniversal(jd,tz))},HanCal._newMoonBefore=function(jd){var tz=HanCal._chineseTZ(jd),jd=Astro._universalFromLocal(jd,tz),jd=Astro._newMoonBefore(jd);return Astro._floorToJD(Astro._localFromUniversal(jd,tz))},HanCal._leapYearCalc=function(year,cycle){year={elapsedYear:HanCal._getElapsedYear(year,cycle)};return year.solstice1=HanCal._solsticeBefore(year.elapsedYear),year.solstice2=HanCal._solsticeBefore(year.elapsedYear+1),year.m1=HanCal._newMoonOnOrAfter(Astro._ceilToJD(year.solstice1)),year.m2=HanCal._newMoonBefore(Astro._ceilToJD(year.solstice2)),year},HanCal._currentMajorST=function(jd){jd=Astro._solarLongitude(Astro._universalFromLocal(jd,HanCal._chineseTZ(jd)));return MathUtils.amod(2+Math.floor(jd/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){year=HanCal._leapYearCalc(year),year=HanCal._newMoonOnOrAfter(year.m1+29*month);return HanCal._newMoonOnOrAfter(year+1)-year},HanCal.prototype.equivalentCycleYear=function(year){return MathUtils.mod(year-(0<=year?474:473),2820)+474},HanCal.prototype.isLeapYear=function(year,cycle){year=HanCal._leapYearCalc(year,cycle);return 12===Math.round((year.m2-year.m1)/29.530588853)},HanCal.prototype.getLeapMonth=function(year,cycle){year=HanCal._leapYearCalc(year,cycle);if(12!=Math.round((year.m2-year.m1)/29.530588853))return-1;for(var month=0,m=HanCal._newMoonOnOrAfter(year.m1+1);!HanCal._noMajorST(m);)month++,m=HanCal._newMoonOnOrAfter(m+1);return month},HanCal.prototype.newYears=function(year,cycle){year=HanCal._leapYearCalc(year,cycle),cycle=HanCal._newMoonOnOrAfter(year.m1+1);return 12===Math.round((year.m2-year.m1)/29.530588853)&&(HanCal._noMajorST(year.m1)||HanCal._noMajorST(cycle))?HanCal._newMoonOnOrAfter(cycle+1):cycle},HanCal.prototype.getType=function(){return this.type},Calendar._constructors.han=HanCal,module.exports=HanCal;