ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 3.51 kB
JavaScript
var ilib=require("./ilib.js");var MathUtils=require("./MathUtils.js");var Calendar=require("./Calendar.js");var Astro=require("./Astro.js");var RataDie=require("./RataDie.js");var GregorianDate=require("./GregorianDate.js");var GregRataDie=require("./GregRataDie.js");var HanCal=function(a){this.type="han";var r=a&&typeof a.sync==="boolean"?a.sync:true;Astro.initAstro(r,a&&a.loadParams,ilib.bind(this,function(r){if(a&&typeof a.callback==="function"){a.callback(this)}}))};HanCal._getElapsedYear=function(a,r){var n=a||0;if(typeof a!=="undefined"&&a<61&&typeof r!=="undefined"){n=60*r+a}return n};HanCal._hanNextSolarLongitude=function(a,r){var n=HanCal._chineseTZ(a);var e=Astro._universalFromLocal(a,n);var o=Astro._nextSolarLongitude(e,r);return Astro._localFromUniversal(o,n)};HanCal._majorSTOnOrAfter=function(a){var r=HanCal._chineseTZ(a);var n=Astro._universalFromLocal(a,r);var e=Astro._fixangle(30*Math.ceil(Astro._solarLongitude(n)/30));return HanCal._hanNextSolarLongitude(a,e)};HanCal._solsticeBefore=function(a,r){var n=HanCal._getElapsedYear(a,r);var e=n-2697;var o=new GregRataDie({year:e-1,month:12,day:15,hour:0,minute:0,second:0,millisecond:0});return HanCal._majorSTOnOrAfter(o.getRataDie()+RataDie.gregorianEpoch)};HanCal._chineseTZ=function(a){var r=GregorianDate._calcYear(a-RataDie.gregorianEpoch);return r<1929?465.6666666666667:480};HanCal._newMoonOnOrAfter=function(a){var r=HanCal._chineseTZ(a);var n=Astro._universalFromLocal(a,r);var e=Astro._newMoonAtOrAfter(n);return Astro._floorToJD(Astro._localFromUniversal(e,r))};HanCal._newMoonBefore=function(a){var r=HanCal._chineseTZ(a);var n=Astro._universalFromLocal(a,r);var e=Astro._newMoonBefore(n);return Astro._floorToJD(Astro._localFromUniversal(e,r))};HanCal._leapYearCalc=function(a,r){var n={elapsedYear:HanCal._getElapsedYear(a,r)};n.solstice1=HanCal._solsticeBefore(n.elapsedYear);n.solstice2=HanCal._solsticeBefore(n.elapsedYear+1);n.m1=HanCal._newMoonOnOrAfter(Astro._ceilToJD(n.solstice1));n.m2=HanCal._newMoonBefore(Astro._ceilToJD(n.solstice2));return n};HanCal._currentMajorST=function(a){var r=Astro._solarLongitude(Astro._universalFromLocal(a,HanCal._chineseTZ(a)));return MathUtils.amod(2+Math.floor(r/30),12)};HanCal._noMajorST=function(a){return HanCal._currentMajorST(a)===HanCal._currentMajorST(HanCal._newMoonOnOrAfter(a+1))};HanCal.prototype.getNumMonths=function(a,r){return this.isLeapYear(a,r)?13:12};HanCal.prototype.getMonLength=function(a,r){var n=HanCal._leapYearCalc(r);var e=HanCal._newMoonOnOrAfter(n.m1+a*29);var o=HanCal._newMoonOnOrAfter(e+1);return o-e};HanCal.prototype.equivalentCycleYear=function(a){var r=a-(a>=0?474:473);return MathUtils.mod(r,2820)+474};HanCal.prototype.isLeapYear=function(a,r){var n=HanCal._leapYearCalc(a,r);return Math.round((n.m2-n.m1)/29.530588853)===12};HanCal.prototype.getLeapMonth=function(a,r){var n=HanCal._leapYearCalc(a,r);if(Math.round((n.m2-n.m1)/29.530588853)!=12){return-1}var e=0;var o=HanCal._newMoonOnOrAfter(n.m1+1);while(!HanCal._noMajorST(o)){e++;o=HanCal._newMoonOnOrAfter(o+1)}return e};HanCal.prototype.newYears=function(a,r){var n=HanCal._leapYearCalc(a,r);var e=HanCal._newMoonOnOrAfter(n.m1+1);if(Math.round((n.m2-n.m1)/29.530588853)===12&&(HanCal._noMajorST(n.m1)||HanCal._noMajorST(e))){return HanCal._newMoonOnOrAfter(e+1)}return e};HanCal.prototype.getType=function(){return this.type};HanCal.prototype.newDateInstance=function(a){var r=require("./HanDate.js");return new r(a)};Calendar._constructors["han"]=HanCal;module.exports=HanCal;