ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 1.95 kB
JavaScript
var MathUtils=require("./MathUtils.js"),JSUtils=require("./JSUtils.js"),JulianDay=require("./JulianDay.js"),RataDie=function(params){var date;params&&(void 0!==params.date?(date=params.date,JSUtils.isDate(date)||(date=new Date(date)),this._setTime(date.getTime())):void 0!==params.unixtime?this._setTime(parseInt(params.unixtime,10)):void 0!==params.julianday?this._setJulianDay(parseFloat(params.julianday)):params.year||params.month||params.day||params.hour||params.minute||params.second||params.millisecond||params.parts||params.cycle?this._setDateComponents(params):void 0!==params.rd&&(this.rd=("object"==typeof params.rd&¶ms.rd instanceof RataDie?params.rd:params).rd)),void 0!==this.rd&&!isNaN(this.rd)||(date=new Date(),this._setTime(date.getTime()))};RataDie.gregorianEpoch=1721424.5,RataDie.prototype={epoch:RataDie.gregorianEpoch,_setTime:function(millis){this._setJulianDay(2440587.5+millis/864e5)},_setJulianDay:function(date){date="number"==typeof date?new JulianDay(date):date;this.rd=MathUtils.halfup(864e5*(date.getDate()-this.epoch))/864e5},_onOrBefore:function(rd,dayOfWeek){return rd-MathUtils.mod(Math.floor(rd)-dayOfWeek-2,7)},onOrBefore:function(dayOfWeek,offset){return this._onOrBefore(this.rd+(offset=offset||0),dayOfWeek)-offset},onOrAfter:function(dayOfWeek,offset){return this._onOrBefore(this.rd+6+(offset=offset||0),dayOfWeek)-offset},before:function(dayOfWeek,offset){return this._onOrBefore(this.rd-1+(offset=offset||0),dayOfWeek)-offset},after:function(dayOfWeek,offset){return this._onOrBefore(this.rd+7+(offset=offset||0),dayOfWeek)-offset},getTime:function(){var jd=this.getJulianDay();return jd<2440587.5||2465442.634803241<jd?-1:Math.round(864e5*(jd-2440587.5))},getTimeExtended:function(){var jd=this.getJulianDay();return jd<-97559412.5||102440587.5<jd?NaN:Math.round(864e5*(jd-2440587.5))},getJulianDay:function(){return this.rd+this.epoch},getRataDie:function(){return this.rd}},module.exports=RataDie;