@xfanta/mars-time
Version:
Mars time conversion library (MSD, MTC, Darian Calendar)
39 lines (38 loc) • 1.21 kB
JavaScript
import { utcToJulianDate } from "./julian";
const JD_UNIX_EPOCH = 2440587.5;
const MSD_OFFSET = 2405522.0028779;
const SECONDS_IN_DAY = 86400;
const MARS_SOL_IN_SECONDS = 88775.244;
/**
* Converts UTC date to Mars Sol Date (MSD).
* @param date UTC date
* @returns Mars Sol Date (MSD)
*/
export function utcToMarsSolDate(date) {
const jd = utcToJulianDate(date);
return (jd - MSD_OFFSET) * (SECONDS_IN_DAY / MARS_SOL_IN_SECONDS);
}
/**
* Converts Mars Sol Date (MSD) to UTC date.
* @param msd Mars Sol Date
* @returns UTC Date
*/
export function marsSolDateToUTC(msd) {
const jd = msd * (MARS_SOL_IN_SECONDS / SECONDS_IN_DAY) + MSD_OFFSET;
return new Date((jd - JD_UNIX_EPOCH) * SECONDS_IN_DAY * 1000);
}
/**
* Returns Martian Coordinated Time (MTC) in HH:MM:SS format.
* @param msd Mars Sol Date
* @returns MTC string
*/
export function getMartianCoordinatedTime(msd) {
const mtc = (24 * msd) % 24;
const hours = Math.floor(mtc);
const minutes = Math.floor((mtc - hours) * 60);
const seconds = Math.floor(((mtc - hours) * 60 - minutes) * 60);
return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
}
function pad(n) {
return n.toString().padStart(2, '0');
}