ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 3.03 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 PersianAlgoCal=require("./PersianAlgoCal.js");var PersAlgoRataDie=require("./PersAlgoRataDie.js");var PersianAlgoDate=function(e){this.cal=new PersianAlgoCal;this.timezone="local";if(e){if(e.locale){this.locale=typeof e.locale==="string"?new Locale(e.locale):e.locale;var t=new LocaleInfo(this.locale);this.timezone=t.getTimeZone()}if(e.timezone){this.timezone=e.timezone}if(e.year||e.month||e.day||e.hour||e.minute||e.second||e.millisecond){this.year=parseInt(e.year,10)||0;this.month=parseInt(e.month,10)||1;this.day=parseInt(e.day,10)||1;this.hour=parseInt(e.hour,10)||0;this.minute=parseInt(e.minute,10)||0;this.second=parseInt(e.second,10)||0;this.millisecond=parseInt(e.millisecond,10)||0;this.dayOfYear=parseInt(e.dayOfYear,10);if(typeof e.dst==="boolean"){this.dst=e.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(e);this._calcDateComponents()}};PersianAlgoDate.prototype=new IDate({noinstance:true});PersianAlgoDate.prototype.parent=IDate;PersianAlgoDate.prototype.constructor=PersianAlgoDate;PersianAlgoDate.prototype.newRd=function(e){return new PersAlgoRataDie(e)};PersianAlgoDate.prototype._calcYear=function(e){var t=e-173126;var i=Math.floor(t/1029983);var a=MathUtils.mod(t,1029983);var s=a===1029982?2820:Math.floor((2816*a+1031337)/1028522);var o=474+2820*i+s;return o>0?o:o-1};PersianAlgoDate.prototype._calcDateComponents=function(){var e,t=this.rd.getRataDie();this.year=this._calcYear(t);if(typeof this.offset==="undefined"){if(!this.tz){this.tz=new TimeZone({id:this.timezone})}this.offset=this.tz.getOffsetMillis(this)/864e5}if(this.offset!==0){t+=this.offset;this.year=this._calcYear(t)}var i=this.newRd({year:this.year,month:1,day:1,hour:0,minute:0,second:0,millisecond:0});e=t-i.getRataDie()+1;this.dayOfYear=e;this.month=SearchUtils.bsearch(e,PersAlgoRataDie.cumMonthLengths);e-=PersAlgoRataDie.cumMonthLengths[this.month-1];this.day=Math.floor(e);e-=this.day;e=Math.round(e*864e5);this.hour=Math.floor(e/36e5);e-=this.hour*36e5;this.minute=Math.floor(e/6e4);e-=this.minute*6e4;this.second=Math.floor(e/1e3);e-=this.second*1e3;this.millisecond=e};PersianAlgoDate.prototype.getDayOfWeek=function(){var e=Math.floor(this.getRataDie());return MathUtils.mod(e-3,7)};PersianAlgoDate.prototype.getDayOfYear=function(){return PersAlgoRataDie.cumMonthLengths[this.month-1]+this.day};PersianAlgoDate.prototype.getEra=function(){return this.year<1?-1:1};PersianAlgoDate.prototype.getCalendar=function(){return"persian-algo"};IDate._constructors["persian-algo"]=PersianAlgoDate;module.exports=PersianAlgoDate;