forked from aresastro/marsdatejs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmarsdate.min.js
1 lines (1 loc) · 7.92 KB
/
marsdate.min.js
1
"use strict";class MarsDate{constructor(){var e=this.solveDate(function(e){var t={}.toString.call(e[0]).split(" ")[1].slice(0,-1).toLowerCase();"string"==t&&e[0].indexOf(".")>-1&&(t="msd");"number"==t&&e.length>=3&&(t="marsdate");return t}(arguments),arguments);this.millis=e.millis,this.json=e.dateObject,this.string=this.formatDate(MarsDate.i18n.toString),this.earthDate=e.earthDate}[Symbol.toPrimitive](e){return"number"===e?this.millis:this.string}toString(){return this.formatDate(MarsDate.i18n.toString)}toDateString(){return this.formatDate(MarsDate.i18n.toDateString)}toJSON(){return this.formatDate(MarsDate.i18n.toJSON)}toISOString(){return this.formatDate(MarsDate.i18n.toISOString)}toMTCString(){this.solveFromMSD((this.millis+0xa141391ff67)/864e5);return this.formatDate(MarsDate.i18n.toMTCString)}setTimezone(e){this.json.Z=MarsDate.i18n.timezones[e];var t="+"===e[0]?1:-1,a=(36e5*(10*e[1]+1*e[2])*t+(1*this.millis+0xa141391ff67))/864e5,r=this.getDateFromMSD(a);this.json=r,this.json.Z=MarsDate.i18n.timezones[e],this.string=this.formatDate(MarsDate.i18n.toString)}solveDate(e,t){var a={};switch(e){case"undefined":a=this.solveFromEarthDate();break;case"date":a=this.solveFromEarthDate(t[0]);break;case"msd":a=this.solveFromMSD(t[0]);break;case"number":a=this.solveFromMSD((0xa141391ff67+t[0])/864e5);break;case"string":a=this.solveFromDateString(t[0]);break;case"marsdate":a=this.solveFromDate(t)}return a}solveFromEarthDate(e){var t={};return t.earthDate=e||new Date,t.j2000=this.getj2000FromEarthDate(t.earthDate),t.MSD=this.getMSDFromj2000(t.j2000),t.dateObject=this.getDateFromMSD(t.MSD),t.millis=Math.floor(864e5*t.MSD-0xa141391ff67),t}solveFromMSD(e){var t={};return t.MSD=e,t.j2000=this.getj2000FromMSD(t.MSD),t.earthDate=this.getEarthDateFromj2000(t.j2000),t.dateObject=this.getDateFromMSD(t.MSD),t.millis=Math.floor(864e5*t.MSD-0xa141391ff67),t}solveFromDateString(e){var t=[],a=e.match(/\d{2}:\d{2}:\d{2}/i),r=e.match(/\w{3}\s\d{1,2}\s\d{1,4}/i);return r?(r=r[0].split(" "),t[0]=1*r[2],t[1]=MarsDate.i18n.mon.indexOf(r[0].trim())+1,t[2]=1*r[1],a&&(a=a[0].split(":"),t[3]=1*a[0],t[4]=1*a[1],t[5]=1*a[2]),this.solveFromDate(t)):"Invalid date string"}solveFromDate(e){var t={y:e[0],m:e[1]||0,d:e[2]||0,H:e[3]||0,M:e[4]||0,s:e[5]||0,l:e[6]||0},a=this.getMSDFromDate(t);return this.solveFromMSD(a)}formatDate(e){var t=this.json;if(e.match("|")){var a=e=e.split("|");e=e.shift()}t.Z||(t.Z=MarsDate.i18n.timezones["+0000"]);if(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace("TT",t.TT)).replace("T",t.T)).replace("tt",t.tt)).replace("t",t.t)).replace("yyyy",this.pad(t.y,4))).replace("yyy",t.yyy)).replace("yy",t.yy)).replace("ss",t.ss)).replace("l",t.l)).replace("L",t.L)).replace("mmmm",t.mmmm)).replace("mmm",t.mmm)).replace("mm",t.mm)).replace("dddd",t.dddd)).replace("ddd",t.ddd)).replace("dd",t.dd)).replace("d",t.d)).replace("N",t.N)).replace("HH",t.HH)).replace("H",t.H)).replace("hh",t.hh)).replace("h",t.h)).replace("MM",t.MM)).replace("W",t.W)).replace("Z",MarsDate.i18n.timezones["+0000"].tz+t.Z.offset+" ("+t.Z.tz+")"),a)for(var r=0;r<a.length;r++)e=e.replace("X",a[r]);return e}getj2000FromEarthDate(e){return 2440587.5+e.getTime()/864e5+67.184/86400-2451545}getMSDFromj2000(e){return(e-4.5)/1.027491251701389+44796-9626e-7+94129}getDateFromMSD(e){var t={};for(t.H=Math.floor(24*e%24),t.M=Math.floor(1440*e%60),t.M=Math.floor(1440*e%60),t.s=Math.floor(86400*e%60),t.l=Math.floor(864e5*e%1e3),t.n=Math.floor(e),t.y=0;t.n>669;t.y++)this.isLeapYear(t.y)?t.n-=669:t.n-=668;return t.ly=this.isLeapYear(t.y),!t.ly&&t.n>668&&(t.y++,t.n=1),t.n=Math.floor(t.n),t.q=Math.floor(t.n/167),t.q=t.q>3?3:t.q,t.m=Math.floor(6*t.q+(t.n-167*t.q)/28),t.m=t.m>23?23:t.m,t.d=t.n-167*t.q-t.m%6*28+1,this.createDateObjects(t)}getEarthDateFromj2000(e){return new Date(864e5*(e-67.184/86400+2451545-2440587.5))}getj2000FromMSD(e){return 1.027491251701389*(e-94129+9626e-7-44796)+4.5}getMSDFromDate(e){for(var t=e.d+28*e.m-Math.floor(e.m/6)+(e.l+1e3*(e.s+60*(e.M+60*e.H)))/864e5,a=0;a<e.y;a++)this.isLeapYear(a)?t+=669:t+=668;return t}pad(e,t){var a=e.toString();for(t=t||2;a.length<t;)a="0"+a;return a}createDateObjects(e){return e.q||(e.q=Math.ceil((e.m+1)/6)-1),e.n||(e.n=e.d+28*e.m-Math.floor(e.m/6)),e.l||(e.l="000"),e.HH=this.pad(e.H,2),e.h=e.H%12,e.h=0===e.h?12:0,e.hh=this.pad(e.h,2),e.MM=this.pad(e.M,2),e.TT=e.H>11?"PM":"AM",e.T=e.TT[0],e.tt=e.TT.toLowerCase(),e.t=e.tt[0],e.ss=this.pad(e.s,2),e.L=Math.floor(e.l/10),e.dd=this.pad(e.d,2),e.N=(e.d-1)%7,e.dddd=MarsDate.i18n.sols[e.N],e.ddd=MarsDate.i18n.sol[e.N],e.yy=this.pad(e.y%100,2),e.yyy=e.y,e.yyyy=this.pad(e.y,4),e.W=4*e.m+Math.ceil(e.d/7),e.mm=this.pad(e.m,2),e.mmmm=MarsDate.i18n.months[e.m],e.mmm=MarsDate.i18n.mon[e.m],e.l=this.pad(e.l,3),e}isLeapYear(e){return e%500==0||e%10==0&&e%100!=0||e%2!=0}}MarsDate.i18n={months:["Sagittarius","Dhanus","Capricornus","Makara","Aquarius","Kumbha","Pisces","Mina","Aries","Mesha","Taurus","Rishabha","Gemini","Mithuna","Cancer","Karka","Leo","Simha","Virgo","Kanya","Libra","Tula","Scorpius","Vrishika"],mon:["Sag","Dha","Cap","Mak","Aqu","Kum","Pis","Min","Ari","Mes","Tau","Ris","Gem","Mit","Can","Kar","Leo","Sim","Vir","Kan","Lib","Tul","Sco","Vri"],sols:["Sol Solis","Sol Lunae","Sol Martis","Sol Mercurii","Sol Jovis","Sol Veneris","Sol Saturni"],sol:["Sol","Lun","Mar","Mer","Jov","Ven","Sat"],timezones:{"-1100":{label:"Western Amazonian Time",tz:"WAT",longitude:{min:-172.5,max:-157.5},offset:"-1100"},"-1000":{label:"Central Amazonian Time",tz:"CAT",longitude:{min:-157.5,max:-142.5},offset:"-1000"},"-0900":{label:"Eastern Amazonian Time",tz:"EAT",longitude:{min:-142.5,max:-127.5},offset:"-0900"},"-0800":{label:"Western Tharsic Time",tz:"WTT",longitude:{min:-127.5,max:-112.5},offset:"-0800"},"-0700":{label:"Central Tharsic Time",tz:"CTT",longitude:{min:-112.5,max:-97.5},offset:"-0700"},"-0600":{label:"Eastern Tharsic Time",tz:"ETT",longitude:{min:-97.5,max:-82.5},offset:"-0600"},"-0500":{label:"Western Lunar Time",tz:"WLT",longitude:{min:-82.5,max:-67.5},offset:"-0500"},"-0400":{label:"Central Lunar Time",tz:"CLT",longitude:{min:-67.5,max:-52.5},offset:"-0400"},"-0300":{label:"Eastern Lunar Time",tz:"ELT",longitude:{min:-52.5,max:-37.5},offset:"-0300"},"-0200":{label:"Western Oxian Time",tz:"WOT",longitude:{min:-37.5,max:-22.5},offset:"-0200"},"-0100":{label:"Central Oxian Time",tz:"COT",longitude:{min:-22.5,max:-7.5},offset:"-0100"},"+0000":{label:"Airy Mean Time",tz:"AMT",longitude:{min:-7.5,max:7.5},offset:"+0000"},"+0100":{label:"Western Arabian Time",tz:"WRT",longitude:{min:7.5,max:22.5},offset:"+0100"},"+0200":{label:"Central Arabian Time",tz:"CRT",longitude:{min:22.5,max:37.5},offset:"+0200"},"+0300":{label:"Eastern Arabian Time",tz:"ERT",longitude:{min:37.5,max:52.5},offset:"+0300"},"+0400":{label:"Western Syrtic Time",tz:"WST",longitude:{min:52.5,max:67.5},offset:"+0400"},"+0500":{label:"Central Syrtic Time",tz:"CST",longitude:{min:67.5,max:82.5},offset:"+0500"},"+0600":{label:"Eastern Syrtic Time",tz:"EST",longitude:{min:82.5,max:97.5},offset:"+0600"},"+0700":{label:"Western Amenthean Time",tz:"WMT",longitude:{min:97.5,max:112.5},offset:"+0700"},"+0800":{label:"Central Amenthean Time",tz:"CMT",longitude:{min:112.5,max:127.5},offset:"+0800"},"+0900":{label:"Eastern Amenthean Time",tz:"EMT",longitude:{min:127.5,max:142.5},offset:"+0900"},"+1000":{label:"Western Elysian Time",tz:"WET",longitude:{min:142.5,max:157.5},offset:"+1000"},"+1100":{label:"Central Elysian Time",tz:"CET",longitude:{min:157.5,max:172.5},offset:"+1100"},"+1200":{label:"Eastern Elysian Time",tz:"EET",longitude:{min:172.5,max:-172.5},offset:"+1200"},"-021301":{label:"Pathfinder",tz:"PAT",longitude:0,offset:"-021301"},"+110004":{label:"Spirit",tz:"SPI",longitude:0,offset:"+110004"},"-010106":{label:"Opportunity",tz:"OPP",longitude:0,offset:"-010106"},"+090946":{label:"Curiosity",tz:"CUR",longitude:0,offset:"+090946"}},toString:"ddd mmm d yyy HH:MM:ss Z",toDateString:"ddd mmm d yyy",toJSON:"yyy-mm-ddXHH:MM:ss.lA|T",toISOString:"yyy-mm-ddXHH:MM:ss.lA|T",toMTCString:"ddd, dd mmm yyy HH:MM:ss X|AMT"},module.exports=MarsDate;