UNPKG

ilib

Version:

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

1 lines 4.44 kB
var ilib=require("./ilib.js");var MathUtils=require("./MathUtils.js");var Locale=require("./Locale.js");var LocaleInfo=require("./LocaleInfo.js");var IDate=require("./IDate.js");var TimeZone=require("./TimeZone.js");var Calendar=require("./Calendar.js");var HebrewCal=require("./HebrewCal.js");var HebrewRataDie=require("./HebrewRataDie.js");var HebrewDate=function(e){this.cal=new HebrewCal;if(e){if(e.timezone){this.timezone=e.timezone}if(e.locale){this.locale=typeof e.locale==="string"?new Locale(e.locale):e.locale;if(!this.timezone){var t=new LocaleInfo(this.locale);this.timezone=t.getTimeZone()}}if(e.year||e.month||e.day||e.hour||e.minute||e.second||e.millisecond||e.parts){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;if(typeof e.parts!=="undefined"){this.parts=parseInt(e.parts,10);var i=parseInt(e.parts,10)*3.333333333333;this.minute=Math.floor(i/60);i-=this.minute*60;this.second=Math.floor(i);this.millisecond=i-this.second}else{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()}};HebrewDate.prototype=new IDate({noinstance:true});HebrewDate.prototype.parent=IDate;HebrewDate.prototype.constructor=HebrewDate;HebrewDate.cumMonthLengthsReverse=[[0,7],[30,8],[59,9],[88,10],[117,11],[147,12],[176,1],[206,2],[235,3],[265,4],[294,5],[324,6],[354,7]];HebrewDate.cumMonthLengthsLeapReverse=[[0,7],[30,8],[59,9],[88,10],[117,11],[147,12],[177,13],[206,1],[236,2],[265,3],[295,4],[324,5],[354,6],[384,7]];HebrewDate.GregorianDiff=1373060.25;HebrewDate.prototype.newRd=function(e){return new HebrewRataDie(e)};HebrewDate.prototype._calcYear=function(e){var t,i,r;i=Math.floor(e/365.246822206)+1;t=i;r=HebrewCal.newYear(t);while(e>=r){t++;r=HebrewCal.newYear(t)}return t-1};HebrewDate.prototype._calcDateComponents=function(){var e,t,i,r,a=this.rd.getRataDie();if(typeof this.offset==="undefined"){this.year=this._calcYear(a);if(!this.tz){this.tz=new TimeZone({id:this.timezone})}this.offset=this.tz.getOffsetMillis(this)/864e5}if(this.offset!==0){a+=this.offset;this.year=this._calcYear(a)}e=a-HebrewCal.newYear(this.year);if(e>=59){if(e>=88){if(HebrewCal.longKislev(this.year)){e--}}if(HebrewCal.longHeshvan(this.year)){e--}}i=this.cal.isLeapYear(this.year)?HebrewDate.cumMonthLengthsLeapReverse:HebrewDate.cumMonthLengthsReverse;t=0;r=Math.floor(e);while(t+1<i.length&&r>=i[t+1][0]){t++}this.month=i[t][1];e-=i[t][0];this.day=Math.floor(e);e-=this.day;this.day++;e=Math.round(e*864e5);this.hour=Math.floor(e/36e5);e-=this.hour*36e5;if(this.hour>=6){this.hour-=6}else{this.hour+=18}this.minute=Math.floor(e/6e4);e-=this.minute*6e4;this.second=Math.floor(e/1e3);e-=this.second*1e3;this.millisecond=Math.floor(e)};HebrewDate.prototype.getDayOfWeek=function(){var e=Math.floor(this.rd.getRataDie()+(this.offset||0));return MathUtils.mod(e+1,7)};HebrewDate.prototype.getHalaqim=function(){if(this.parts<0){var e=this.minute*6e4+this.second*1e3+this.millisecond;this.parts=e*3e-4}return this.parts};HebrewDate.prototype.firstSunday=function(e){var t=this.newRd({year:e,month:7,day:1,hour:18,minute:0,second:0,millisecond:0,cal:this.cal});var i=this.newRd({rd:t.onOrAfter(4),cal:this.cal});return i.before(0)};HebrewDate.prototype.getDayOfYear=function(){var e=this.cal.isLeapYear(this.year)?HebrewRataDie.cumMonthLengthsLeap:HebrewRataDie.cumMonthLengths;var t=e[this.month-1];if((this.month<7||this.month>8)&&HebrewCal.longHeshvan(this.year)){t++}if((this.month<7||this.month>9)&&HebrewCal.longKislev(this.year)){t++}return t+this.day};HebrewDate.prototype.getWeekOfMonth=function(e){var t=new LocaleInfo(e),i=this.newRd({year:this.year,month:this.month,day:1,hour:18,minute:0,second:0,millisecond:0}),r=this.rd.getRataDie(),a=i.onOrAfter(t.getFirstDayOfWeek());if(a-i.getRataDie()>3){a-=7}return r<a?0:Math.floor((r-a)/7)+1};HebrewDate.prototype.getEra=function(){return this.year<1?-1:1};HebrewDate.prototype.getCalendar=function(){return"hebrew"};IDate._constructors["hebrew"]=HebrewDate;module.exports=HebrewDate;