-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmarsdate.min.js
More file actions
1 lines (1 loc) · 7.9 KB
/
marsdate.min.js
File metadata and controls
1 lines (1 loc) · 7.9 KB
1
class MarsDate{constructor(){function e(a){var b={}.toString.call(a[0]).split(" ")[1].slice(0,-1).toLowerCase();return"string"==b&&a[0].indexOf(".")>-1&&(b="msd"),"number"==b&&a.length>=3&&(b="marsdate"),b}var d=this.solveDate(e(arguments),arguments);this.millis=d.millis,this.json=d.dateObject,this.string=this.formatDate(MarsDate.i18n.toString),this.earthDate=d.earthDate}[Symbol.toPrimitive](a){return"number"===a?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(b){this.json.Z=MarsDate.i18n.timezones[b];var c="+"===b[0]?1:-1,d=36e5*(10*b[1]+1*b[2])*c,e=(d+(1*this.millis+0xa141391ff67))/864e5,f=this.getDateFromMSD(e);this.json=f,this.json.Z=MarsDate.i18n.timezones[b],this.string=this.formatDate(MarsDate.i18n.toString)}solveDate(a,b){var c={};switch(a){case"undefined":c=this.solveFromEarthDate();break;case"date":c=this.solveFromEarthDate(b[0]);break;case"msd":c=this.solveFromMSD(b[0]);break;case"number":c=this.solveFromMSD((0xa141391ff67+b[0])/864e5);break;case"string":c=this.solveFromDateString(b[0]);break;case"marsdate":c=this.solveFromDate(b)}return c}solveFromEarthDate(a){var b={};return b.earthDate=a||new Date,b.j2000=this.getj2000FromEarthDate(b.earthDate),b.MSD=this.getMSDFromj2000(b.j2000),b.dateObject=this.getDateFromMSD(b.MSD),b.millis=Math.floor(864e5*b.MSD-0xa141391ff67),b}solveFromMSD(a){var b={};return b.MSD=a,b.j2000=this.getj2000FromMSD(b.MSD),b.earthDate=this.getEarthDateFromj2000(b.j2000),b.dateObject=this.getDateFromMSD(b.MSD),b.millis=Math.floor(864e5*b.MSD-0xa141391ff67),b}solveFromDateString(b){var c=[],d=b.match(/\d{2}:\d{2}:\d{2}/i),e=b.match(/\w{3}\s\d{1,2}\s\d{1,4}/i);return e?(e=e[0].split(" "),c[0]=1*e[2],c[1]=MarsDate.i18n.mon.indexOf(e[0].trim())+1,c[2]=1*e[1],d&&(d=d[0].split(":"),c[3]=1*d[0],c[4]=1*d[1],c[5]=1*d[2]),this.solveFromDate(c)):"Invalid date string"}solveFromDate(a){var b={y:a[0],m:a[1]||0,d:a[2]||0,H:a[3]||0,M:a[4]||0,s:a[5]||0,l:a[6]||0},c=this.getMSDFromDate(b);return this.solveFromMSD(c)}formatDate(b){var c=this.json;if(b.match("|")){b=b.split("|");var d=b;b=b.shift()}c.Z||(c.Z=MarsDate.i18n.timezones["+0000"]);if(b=b.replace("TT",c.TT),b=b.replace("T",c.T),b=b.replace("tt",c.tt),b=b.replace("t",c.t),b=b.replace("yyyy",this.pad(c.y,4)),b=b.replace("yyy",c.yyy),b=b.replace("yy",c.yy),b=b.replace("ss",c.ss),b=b.replace("l",c.l),b=b.replace("L",c.L),b=b.replace("mmmm",c.mmmm),b=b.replace("mmm",c.mmm),b=b.replace("mm",c.mm),b=b.replace("dddd",c.dddd),b=b.replace("ddd",c.ddd),b=b.replace("dd",c.dd),b=b.replace("d",c.d),b=b.replace("N",c.N),b=b.replace("HH",c.HH),b=b.replace("H",c.H),b=b.replace("hh",c.hh),b=b.replace("h",c.h),b=b.replace("MM",c.MM),b=b.replace("W",c.W),b=b.replace("Z",MarsDate.i18n.timezones["+0000"].tz+c.Z.offset+" ("+c.Z.tz+")"),d)for(var f=0;f<d.length;f++)b=b.replace("X",d[f]);return b}getj2000FromEarthDate(a){return 2440587.5+a.getTime()/864e5+67.184/86400-2451545}getMSDFromj2000(a){return(a-4.5)/1.027491251701389+44796-9626e-7+94129}getDateFromMSD(a){var b={};for(b.H=Math.floor(24*a%24),b.M=Math.floor(1440*a%60),b.M=Math.floor(1440*a%60),b.s=Math.floor(86400*a%60),b.l=Math.floor(864e5*a%1e3),b.n=Math.floor(a),b.y=0;b.n>669;b.y++)this.isLeapYear(b.y)?b.n-=669:b.n-=668;return b.ly=this.isLeapYear(b.y),!b.ly&&b.n>668&&(b.y++,b.n=1),b.n=Math.floor(b.n),b.q=Math.floor(b.n/167),b.q=b.q>3?3:b.q,b.m=Math.floor(6*b.q+(b.n-167*b.q)/28),b.m=b.m>23?23:b.m,b.d=b.n-167*b.q-b.m%6*28+1,this.createDateObjects(b)}getEarthDateFromj2000(a){return new Date(864e5*(a-67.184/86400+2451545)-2440587.5)}getj2000FromMSD(a){return 1.027491251701389*(a-94129+9626e-7-44796)+4.5}getMSDFromDate(a){for(var b=-1+a.d+28*(a.m-1)-Math.floor((a.m-1)/6)+(a.l+1e3*(a.s+60*(a.M+60*a.H)))/864e5,c=0;c<a.y;c++)b+=this.isLeapYear(c)?669:668;return b}pad(a,b){var c=a.toString();for(b=b||2;c.length<b;)c="0"+c;return c}createDateObjects(b){return b.q||(b.q=Math.ceil((b.m+1)/6)-1),b.n||(b.n=b.d+28*b.m-Math.floor(b.m/6)),b.l||(b.l="000"),b.HH=this.pad(b.H,2),b.h=b.H%12,b.h=0===b.h?12:0,b.hh=this.pad(b.h,2),b.MM=this.pad(b.M,2),b.TT=b.H>11?"PM":"AM",b.T=b.TT[0],b.tt=b.TT.toLowerCase(),b.t=b.tt[0],b.ss=this.pad(b.s,2),b.L=Math.floor(b.l/10),b.dd=this.pad(b.d,2),b.N=(b.d-1)%7,b.dddd=MarsDate.i18n.sols[b.N],b.ddd=MarsDate.i18n.sol[b.N],b.yy=this.pad(b.y%100,2),b.yyy=b.y,b.yyyy=this.pad(b.y,4),b.W=4*b.m+Math.ceil(b.d/7),b.mm=this.pad(b.m,2),b.mmmm=MarsDate.i18n.months[b.m],b.mmm=MarsDate.i18n.mon[b.m],b.l=this.pad(b.l,3),b}isLeapYear(a){return a%500==0||a%10==0&&a%100!=0||a%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"};