ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 3.85 kB
JavaScript
var ilib=require("./ilib.js"),SearchUtils=require("./SearchUtils.js"),MathUtils=require("./MathUtils.js"),JSUtils=require("./JSUtils.js"),Locale=require("./Locale.js"),LocaleInfo=require("./LocaleInfo.js"),TimeZone=require("./TimeZone.js"),IDate=require("./IDate.js"),Astro=require("./Astro.js"),PersianCal=require("./PersianCal.js"),PersRataDie=require("./PersRataDie.js"),PersianDate=function(params){this.cal=new PersianCal(),(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))};PersianDate.prototype=new IDate({noinstance:!0}),PersianDate.prototype.parent=IDate,(PersianDate.prototype.constructor=PersianDate).prototype._init=function(params){Astro.initAstro("boolean"!=typeof params.sync||params.sync,params.loadParams,ilib.bind(this,function(x){params.year||params.month||params.day||params.hour||params.minute||params.second||params.millisecond?(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,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.newRd(JSUtils.merge(params,{callback:ilib.bind(this,function(rd){this.rd=rd,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)}))},PersianDate.prototype._init2=function(params){this.rd?"function"==typeof params.onLoad&¶ms.onLoad(this):this.newRd(JSUtils.merge(params,{callback:ilib.bind(this,function(rd){this.rd=rd,this._calcDateComponents(),"function"==typeof params.onLoad&¶ms.onLoad(this)})}))},PersianDate.cumMonthLengths=[0,31,62,93,124,155,186,216,246,276,306,336,366],PersianDate.prototype.newRd=function(params){return new PersRataDie(params)},PersianDate.prototype._calcYear=function(rd){var julianday=rd+this.rd.epoch;return this.rd._getYear(julianday).year},PersianDate.prototype._calcDateComponents=function(){var remainder,rd=this.rd.getRataDie();this.year=this._calcYear(rd),void 0===this.offset&&(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)),remainder=rd-this.newRd({year:this.year,month:1,day:1,hour:0,minute:0,second:0,millisecond:0}).getRataDie()+1,this.dayOfYear=remainder,this.month=SearchUtils.bsearch(Math.floor(remainder),PersianDate.cumMonthLengths),remainder-=PersianDate.cumMonthLengths[this.month-1],this.day=Math.floor(remainder),remainder-=this.day,remainder=Math.round(864e5*remainder),this.hour=Math.floor(remainder/36e5),remainder-=36e5*this.hour,this.minute=Math.floor(remainder/6e4),remainder-=6e4*this.minute,this.second=Math.floor(remainder/1e3),remainder-=1e3*this.second,this.millisecond=remainder},PersianDate.prototype.getDayOfWeek=function(){var rd=Math.floor(this.getRataDie());return MathUtils.mod(rd-3,7)},PersianDate.prototype.getDayOfYear=function(){return PersianDate.cumMonthLengths[this.month-1]+this.day},PersianDate.prototype.getEra=function(){return this.year<1?-1:1},PersianDate.prototype.getCalendar=function(){return"persian"},IDate._constructors.persian=PersianDate,module.exports=PersianDate;