ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 5.08 kB
JavaScript
var ilib=require("../index.js"),MathUtils=require("./MathUtils.js"),Locale=require("./Locale.js"),LocaleInfo=require("./LocaleInfo.js"),IDate=require("./IDate.js"),TimeZone=require("./TimeZone.js"),HebrewCal=require("./HebrewCal.js"),HebrewRataDie=require("./HebrewRataDie.js"),HebrewDate=function(params){this.cal=new HebrewCal(),(params=params||{}).timezone&&(this.timezone=params.timezone),params.locale&&(this.locale="string"==typeof params.locale?new Locale(params.locale):params.locale),this.timezone?this._init(params):this.locale?new LocaleInfo(this.locale,{sync:params.sync,loadParams:params.loadParams,onLoad:ilib.bind(this,function(li){this.li=li,this.timezone=li.getTimeZone(),this._init(params)})}):(this.timezone="local",this._init(params))};HebrewDate.prototype=new IDate({noinstance:!0}),HebrewDate.prototype.parent=IDate,(HebrewDate.prototype.constructor=HebrewDate).prototype._init=function(params){var seconds;params.year||params.month||params.day||params.hour||params.minute||params.second||params.millisecond||params.parts?(this.year=parseInt(params.year,10)||0,this.month=parseInt(params.month,10)||1,this.day=parseInt(params.day,10)||1,this.hour=parseInt(params.hour,10)||0,void 0!==params.parts?(this.parts=parseInt(params.parts,10),seconds=3.333333333333*parseInt(params.parts,10),this.minute=Math.floor(seconds/60),seconds-=60*this.minute,this.second=Math.floor(seconds),this.millisecond=seconds-this.second):(this.minute=parseInt(params.minute,10)||0,this.second=parseInt(params.second,10)||0,this.millisecond=parseInt(params.millisecond,10)||0),this.dayOfYear=parseInt(params.dayOfYear,10),"boolean"==typeof params.dst&&(this.dst=params.dst),this.rd=this.newRd(this),new TimeZone({id:this.timezone,sync:params.sync,loadParams:params.loadParams,onLoad:ilib.bind(this,function(tz){this.tz=tz,this.offset=this.tz._getOffsetMillisWallTime(this)/864e5,0!==this.offset&&(this.rd=this.newRd({rd:this.rd.getRataDie()-this.offset})),this._init2(params)})})):this._init2(params)},HebrewDate.prototype._init2=function(params){this.rd||(this.rd=this.newRd(params),this._calcDateComponents()),"function"==typeof params.onLoad&¶ms.onLoad(this)},HebrewDate.cumMonthLengthsReverse=[[0,7],[30,8],[59,9],[88,10],[117,11],[147,12],[176,1],[206,2],[235,3],[265,4],[294,5],[324,6],[354,7]],HebrewDate.cumMonthLengthsLeapReverse=[[0,7],[30,8],[59,9],[88,10],[117,11],[147,12],[177,13],[206,1],[236,2],[265,3],[295,4],[324,5],[354,6],[384,7]],HebrewDate.GregorianDiff=1373060.25,HebrewDate.prototype.newRd=function(params){return new HebrewRataDie(params)},HebrewDate.prototype._calcYear=function(rd){for(var year=Math.floor(rd/365.246822206)+1,nextNewYear=HebrewCal.newYear(year);nextNewYear<=rd;)nextNewYear=HebrewCal.newYear(++year);return year-1},HebrewDate.prototype._calcDateComponents=function(){var i,table,target,rd=this.rd.getRataDie();for(void 0===this.offset&&(this.year=this._calcYear(rd),this.tz||(this.tz=new TimeZone({id:this.timezone})),this.offset=this.tz.getOffsetMillis(this)/864e5),0!==this.offset&&(rd+=this.offset,this.year=this._calcYear(rd)),59<=(rd=rd-HebrewCal.newYear(this.year))&&(88<=rd&&HebrewCal.longKislev(this.year)&&rd--,HebrewCal.longHeshvan(this.year))&&rd--,table=this.cal.isLeapYear(this.year)?HebrewDate.cumMonthLengthsLeapReverse:HebrewDate.cumMonthLengthsReverse,i=0,target=Math.floor(rd);i+1<table.length&&target>=table[i+1][0];)i++;this.month=table[i][1],rd-=table[i][0],this.day=Math.floor(rd),rd-=this.day,this.day++,rd=Math.round(864e5*rd),this.hour=Math.floor(rd/36e5),rd-=36e5*this.hour,6<=this.hour?this.hour-=6:this.hour+=18,this.minute=Math.floor(rd/6e4),rd-=6e4*this.minute,this.second=Math.floor(rd/1e3),rd-=1e3*this.second,this.millisecond=Math.floor(rd)},HebrewDate.prototype.getDayOfWeek=function(){var rd=Math.floor(this.rd.getRataDie()+(this.offset||0));return MathUtils.mod(rd+1,7)},HebrewDate.prototype.getHalaqim=function(){var h;return this.parts<0&&(h=6e4*this.minute+1e3*this.second+this.millisecond,this.parts=3e-4*h),this.parts},HebrewDate.prototype.firstSunday=function(year){year=this.newRd({year:year,month:7,day:1,hour:18,minute:0,second:0,millisecond:0,cal:this.cal});return this.newRd({rd:year.onOrAfter(4),cal:this.cal}).before(0)},HebrewDate.prototype.getDayOfYear=function(){var days=(this.cal.isLeapYear(this.year)?HebrewRataDie.cumMonthLengthsLeap:HebrewRataDie.cumMonthLengths)[this.month-1];return(this.month<7||8<this.month)&&HebrewCal.longHeshvan(this.year)&&days++,(this.month<7||9<this.month)&&HebrewCal.longKislev(this.year)&&days++,days+this.day},HebrewDate.prototype.getWeekOfMonth=function(locale){var locale=new LocaleInfo(locale),first=this.newRd({year:this.year,month:this.month,day:1,hour:18,minute:0,second:0,millisecond:0}),rd=this.rd.getRataDie(),locale=first.onOrAfter(locale.getFirstDayOfWeek());return 3<locale-first.getRataDie()&&(locale-=7),rd<locale?0:Math.floor((rd-locale)/7)+1},HebrewDate.prototype.getEra=function(){return this.year<1?-1:1},HebrewDate.prototype.getCalendar=function(){return"hebrew"},IDate._constructors.hebrew=HebrewDate,module.exports=HebrewDate;