ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 3.92 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 JulianDay=require("./JulianDay.js");var IDate=require("./IDate.js");var TimeZone=require("./TimeZone.js");var Calendar=require("./Calendar.js");var GregorianCal=require("./GregorianCal.js");var GregRataDie=require("./GregRataDie.js");var GregorianDate=function(e){this.cal=new GregorianCal;this.timezone="local";if(e){if(typeof e.noinstance==="boolean"&&e.noinstance){return}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.toString()}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;if(typeof e.dst==="boolean"){this.dst=e.dst}this.rd=this.newRd(e);this.offset=0;if(this.timezone==="local"&&typeof e.dst==="undefined"){var i=new Date(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);this.offset=-i.getTimezoneOffset()/1440}else{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()}};GregorianDate.prototype=new IDate({noinstance:true});GregorianDate.prototype.parent=IDate;GregorianDate.prototype.constructor=GregorianDate;GregorianDate.prototype.newRd=function(e){return new GregRataDie(e)};GregorianDate._calcYear=function(e){var t,i,a,r,o,s,n,h;r=Math.floor((e-1)/146097);t=MathUtils.mod(e-1,146097);o=Math.floor(t/36524);i=MathUtils.mod(t,36524);s=Math.floor(i/1461);a=MathUtils.mod(i,1461);n=Math.floor(a/365);h=400*r+100*o+4*s+n;if(o!==4&&n!==4){h++}return h};GregorianDate.prototype._calcYear=function(e){return GregorianDate._calcYear(e)};GregorianDate.prototype._calcDateComponents=function(){if(this.timezone==="local"&&this.rd.getRataDie()>=-99280837&&this.rd.getRataDie()<=100719163){var e=new Date(this.rd.getTimeExtended());this.year=e.getFullYear();this.month=e.getMonth()+1;this.day=e.getDate();this.hour=e.getHours();this.minute=e.getMinutes();this.second=e.getSeconds();this.millisecond=e.getMilliseconds();this.offset=-e.getTimezoneOffset()/1440}else{if(typeof this.offset==="undefined"){this.year=this._calcYear(this.rd.getRataDie());if(!this.tz){this.tz=new TimeZone({id:this.timezone})}this.offset=this.tz.getOffsetMillis(this)/864e5}var t=this.rd.getRataDie();if(this.offset!==0){t+=this.offset}this.year=this._calcYear(t);var i=this.newRd({year:this.year,month:1,day:1,cal:this.cal});var a=t-i.getRataDie()+1;var r=GregorianCal.prototype.isLeapYear.call(this.cal,this.year)?GregRataDie.cumMonthLengthsLeap:GregRataDie.cumMonthLengths;this.month=SearchUtils.bsearch(Math.floor(a),r);a=a-r[this.month-1];this.day=Math.floor(a);a-=this.day;a=Math.round(a*864e5);this.hour=Math.floor(a/36e5);a-=this.hour*36e5;this.minute=Math.floor(a/6e4);a-=this.minute*6e4;this.second=Math.floor(a/1e3);a-=this.second*1e3;this.millisecond=Math.floor(a)}};GregorianDate.prototype.getDayOfWeek=function(){var e=Math.floor(this.rd.getRataDie()+(this.offset||0));return MathUtils.mod(e,7)};GregorianDate.prototype.getDayOfYear=function(){var e=this.cal.isLeapYear(this.year)?GregRataDie.cumMonthLengthsLeap:GregRataDie.cumMonthLengths;return e[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;