ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 2.94 kB
JavaScript
var ilib=require("./ilib.js");var SearchUtils=require("./SearchUtils.js");var MathUtils=require("./MathUtils.js");var Locale=require("./Locale.js");var LocaleInfo=require("./LocaleInfo.js");var TimeZone=require("./TimeZone.js");var IDate=require("./IDate.js");var Calendar=require("./Calendar.js");var IslamicRataDie=require("./IslamicRataDie.js");var IslamicCal=require("./IslamicCal.js");var IslamicDate=function(t){this.cal=new IslamicCal;if(t){if(t.locale){this.locale=typeof t.locale==="string"?new Locale(t.locale):t.locale;var e=new LocaleInfo(this.locale);this.timezone=e.getTimeZone()}if(t.timezone){this.timezone=t.timezone}if(t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond){this.year=parseInt(t.year,10)||0;this.month=parseInt(t.month,10)||1;this.day=parseInt(t.day,10)||1;this.hour=parseInt(t.hour,10)||0;this.minute=parseInt(t.minute,10)||0;this.second=parseInt(t.second,10)||0;this.millisecond=parseInt(t.millisecond,10)||0;this.dayOfYear=parseInt(t.dayOfYear,10);if(typeof t.dst==="boolean"){this.dst=t.dst}this.rd=this.newRd(this);if(!this.tz){this.tz=new TimeZone({id:this.timezone})}this.offset=this.tz._getOffsetMillisWallTime(this)/864e5;if(this.offset!==0){this.rd=this.newRd({rd:this.rd.getRataDie()-this.offset})}}}if(!this.rd){this.rd=this.newRd(t);this._calcDateComponents()}};IslamicDate.prototype=new IDate({noinstance:true});IslamicDate.prototype.parent=IDate;IslamicDate.prototype.constructor=IslamicDate;IslamicDate.cumMonthLengths=[0,30,59,89,118,148,177,207,236,266,295,325,354];IslamicDate.GregorianDiff=227015;IslamicDate.prototype.newRd=function(t){return new IslamicRataDie(t)};IslamicDate.prototype._calcYear=function(t){return Math.floor((30*t+10646)/10631)};IslamicDate.prototype._calcDateComponents=function(){var t,e=this.rd.getRataDie();this.year=this._calcYear(e);if(typeof this.offset==="undefined"){this.year=this._calcYear(e);if(!this.tz){this.tz=new TimeZone({id:this.timezone})}this.offset=this.tz.getOffsetMillis(this)/864e5}if(this.offset!==0){e+=this.offset;this.year=this._calcYear(e)}var i=this.newRd({year:this.year,month:1,day:1,hour:0,minute:0,second:0,millisecond:0});t=e-i.getRataDie()+1;this.dayOfYear=t;this.month=SearchUtils.bsearch(t,IslamicDate.cumMonthLengths);t-=IslamicDate.cumMonthLengths[this.month-1];this.day=Math.floor(t);t-=this.day;t=Math.round(t*864e5);this.hour=Math.floor(t/36e5);t-=this.hour*36e5;this.minute=Math.floor(t/6e4);t-=this.minute*6e4;this.second=Math.floor(t/1e3);t-=this.second*1e3;this.millisecond=t};IslamicDate.prototype.getDayOfWeek=function(){var t=Math.floor(this.rd.getRataDie()+(this.offset||0));return MathUtils.mod(t-2,7)};IslamicDate.prototype.getDayOfYear=function(){return IslamicDate.cumMonthLengths[this.month-1]+this.day};IslamicDate.prototype.getEra=function(){return this.year<1?-1:1};IslamicDate.prototype.getCalendar=function(){return"islamic"};IDate._constructors["islamic"]=IslamicDate;module.exports=IslamicDate;