UNPKG

ilib

Version:

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

1 lines 4.95 kB
var ilib=require("./ilib.js"),SearchUtils=require("./SearchUtils.js"),MathUtils=require("./MathUtils.js"),Locale=require("./Locale.js"),LocaleInfo=require("./LocaleInfo.js"),IDate=require("./IDate.js"),TimeZone=require("./TimeZone.js"),GregorianCal=require("./GregorianCal.js"),GregRataDie=require("./GregRataDie.js"),GregorianDate=function(params){this.cal=new GregorianCal(),"boolean"==typeof(params=params||{}).noinstance&&params.noinstance||(params.timezone&&(this.timezone=params.timezone.toString()),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)))};GregorianDate.prototype=new IDate({noinstance:!0}),GregorianDate.prototype.parent=IDate,(GregorianDate.prototype.constructor=GregorianDate).prototype._init=function(params){if(params.year||params.month||params.day||params.hour||params.minute||params.second||params.millisecond)if(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,"boolean"==typeof params.dst&&(this.dst=params.dst),this.rd=this.newRd(params),this.offset=0,"local"===this.timezone&&void 0===params.dst){var d=new Date(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond),hBefore=new Date(this.year,this.month-1,this.day,this.hour-1,this.minute,this.second,this.millisecond);if(this.offset=-d.getTimezoneOffset()/1440,d.getTimezoneOffset()<hBefore.getTimezoneOffset()){var startOffset=-hBefore.getTimezoneOffset()/1440;this.rd=this.newRd({rd:this.rd.getRataDie()-startOffset})}else this.rd=this.newRd({rd:this.rd.getRataDie()-this.offset});this._init2(params)}else 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,this.rd=this.newRd({rd:this.rd.getRataDie()-this.offset}),this._init2(params)})});else this._init2(params)},GregorianDate.prototype._init2=function(params){this.rd||(this.rd=this.newRd(params),this._calcDateComponents()),"function"==typeof params.onLoad&&params.onLoad(this)},GregorianDate.prototype.newRd=function(params){return new GregRataDie(params)},GregorianDate._calcYear=function(rd){var days400,days100,days4,years400,years100,years4,years1,year;return years400=Math.floor((rd-1)/146097),days400=MathUtils.mod(rd-1,146097),years100=Math.floor(days400/36524),days100=MathUtils.mod(days400,36524),years4=Math.floor(days100/1461),days4=MathUtils.mod(days100,1461),year=400*years400+100*years100+4*years4+(years1=Math.floor(days4/365)),4!==years100&&4!==years1&&year++,year},GregorianDate.prototype._calcYear=function(rd){return GregorianDate._calcYear(rd)},GregorianDate.prototype._calcDateComponents=function(){if("local"===this.timezone&&-99280837<=this.rd.getRataDie()&&this.rd.getRataDie()<=100719163){var d=new Date(this.rd.getTimeExtended());this.year=d.getFullYear(),this.month=d.getMonth()+1,this.day=d.getDate(),this.hour=d.getHours(),this.minute=d.getMinutes(),this.second=d.getSeconds(),this.millisecond=d.getMilliseconds(),this.offset=-d.getTimezoneOffset()/1440}else{void 0===this.offset&&(this.year=this._calcYear(this.rd.getRataDie()),this.tz||(this.tz=new TimeZone({id:this.timezone})),this.offset=this.tz.getOffsetMillis(this)/864e5);var rd=this.rd.getRataDie();0!==this.offset&&(rd+=this.offset),this.year=this._calcYear(rd);var remainder=rd-this.newRd({year:this.year,month:1,day:1,cal:this.cal}).getRataDie()+1,cumulative=GregorianCal.prototype.isLeapYear.call(this.cal,this.year)?GregRataDie.cumMonthLengthsLeap:GregRataDie.cumMonthLengths;this.month=SearchUtils.bsearch(Math.floor(remainder),cumulative),remainder-=cumulative[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=Math.floor(remainder)}},GregorianDate.prototype.getDayOfWeek=function(){var rd=Math.floor(this.rd.getRataDie()+(this.offset||0));return MathUtils.mod(rd,7)},GregorianDate.prototype.getDayOfYear=function(){return(this.cal.isLeapYear(this.year)?GregRataDie.cumMonthLengthsLeap:GregRataDie.cumMonthLengths)[this.month-1]+this.day},GregorianDate.prototype.getEra=function(){return this.year<1?-1:1},GregorianDate.prototype.getCalendar=function(){return"gregorian"},IDate._constructors.gregorian=GregorianDate,module.exports=GregorianDate;