UNPKG

@luke-zhang-04/dateplus

Version:

A simple program to assist with date manipulation

199 lines 13.9 kB
/** * DatePlus A simple program to assist with date manipulation * * @license MIT * @version 4.0.0-beta2 * @author Luke Zhang luke-zhang-04.github.io * @copyright Copyright (C) 2020 - 2021 Luke Zhang */ import { daysReference, monthsReference, oneDay, oneHour, oneMinute } from "./values"; /* eslint-disable id-length */ /** * Reference to months of a year, zero indexed */ const keysReference = { y: "year", m: "month", d: "day", }; /* eslint-enable id-length */ /** * Add's 0s to date (e.g 2020/4/3 => 2020/04/03) * * @param date - String date to format * @param seperator - Char the date is seperatred by * @returns - Date with zeros */ export const addZeros = (date, seperator = "/") => { const splitDate = date.split(seperator); const newDateValues = splitDate.map((section) => section.length < 2 ? `0${section}` : section); return newDateValues.join(seperator); }; /** * Format date into a string in the form YYYY{seperator}MM{seperator}DD * * @param date - Date object to format * @param format - Format of string date * @param seperator - String to seperate date values with * @returns Formatted date */ export const formatDate = (date, format = "y:m:d", seperator = "/") => { const month = (date.getMonth() + 1).toString(); const day = date.getDate().toString(); /* eslint-disable id-length */ const year = date.getFullYear().toString(); const values = { m: month, d: day, y: year, }; /* eslint-enable id-length */ const formatArray = format.split(":"); return formatArray.map((val) => values[val]).join(seperator); }; /** * Gets date values and outputs an object * * @param date - Date to extract values from, months zero indexed * @param format - Format of string date * @param seperator - Seperator the date works with; leave auto for auto detection, limited to 1 char * @returns Object with all values */ export const getDateValues = (date, format = "y:m:d", seperator = "auto") => { let _seperator = "/"; if (seperator === "auto") { for (const letter of date) { if (isNaN(Number(letter))) { _seperator = letter; break; } } } else { _seperator = seperator; } const splitDate = date.split(_seperator); const dateFormat = format.split(":"); const output = {}; for (let index = 0; index < 3; index++) { const key = keysReference[dateFormat[index]]; output[key] = Number(splitDate[index]); } return output; }; /** * Converts numerical day of week into word form (e.g 0 => "Sunday") * * @param numerical - Numerical day of week, 0 indexed (0-6) * @returns Stringed day of week */ export const getWordDay = (numerical) => daysReference[numerical]; /** * Converts numerical month into word form (e.g 0 => "January") * * @param numerical - Numerical day of week, 0 indexed (0-11) * @returns Stringed worded month */ export const getWordMonth = (numerical) => monthsReference[numerical]; /** * Calculates number of elapsed days between date1 and date2 * * @param date1 - Starting date object to calculate * @param date2 - Ending date object to calculate * @returns - Number of elapsed days */ export const getElapsedDays = (date1, date2) => Math.round((date1.getTime() - date2.getTime()) / oneDay) * -1; /** * Calculates number of elapsed hours between date1 and date2 * * @param date1 - Starting date object to calculate * @param date2 - Ending date object to calculate * @returns - Number of elapsed hours */ export const getElapsedHours = (date1, date2) => Math.round((date1.getTime() - date2.getTime()) / oneHour) * -1; /** * Calculates number of elapsed minutes between date1 and date2 * * @param date1 - Starting date object to calculate * @param date2 - Ending date object to calculate * @returns - Number of elapsed minutes */ export const getElapsedMinutes = (date1, date2) => Math.round((date1.getTime() - date2.getTime()) / oneMinute) * -1; /** * Calculates number of elapsed seconds between date1 and date2 * * @param date1 - Starting date object to calculate * @param date2 - Ending date object to calculate * @returns - Number of elapsed seconds */ export const getElapsedSeconds = (date1, date2) => Math.round((date1.getTime() - date2.getTime()) / 1000 /* MsPerSec */) * -1; /** * Calculates number of elapsed milliseconds between date1 and date2 * * @param date1 - Starting date object to calculate * @param date2 - Ending date object to calculate * @returns - Number of elapsed milliseconds */ export const getElapsedMs = (date1, date2) => Math.round(date1.getTime() - date2.getTime()) * -1; /** * Calculates elapsed time between current and previous * * @param start- Start date * @param end - End date * @param approx - Text to append to values from days and on, e.g *about* 1 day aga * @returns Time difference in string form, e.g "3 seconds ago" */ export const getElapsedString = (start, end, approx = "about") => { const daysPerMonth = 30; const daysPerYear = 365; const msPerMonth = oneDay * daysPerMonth; const msPerYear = oneDay * daysPerYear; const elapsed = getElapsedMs(start, end); let val; if (elapsed < oneMinute) { val = Math.round(elapsed / 1000 /* MsPerSec */); return `${val} second${val === 1 ? "" : "s"} ago`; } else if (elapsed < oneHour) { val = Math.round(elapsed / oneMinute); return `${val} minute${val === 1 ? "" : "s"} ago`; } else if (elapsed < oneDay) { val = Math.round(elapsed / oneHour); return `${val} hour${val === 1 ? "" : "s"} ago`; } else if (elapsed < msPerMonth) { val = Math.round(elapsed / oneDay); return `${approx} ${val} day${val === 1 ? "" : "s"} ago`; } else if (elapsed < msPerYear) { val = Math.round(elapsed / msPerMonth); return `${approx} ${val} month${val === 1 ? "" : "s"} ago`; } val = Math.round(elapsed / msPerYear); return `${approx} ${val} year${val === 1 ? "" : "s"} ago`; }; // The next 2 functions are too hard to test for /* istanbul ignore next */ /** * Convert a utc date to local * * @param date - Date to use. Note that the parameter will never be mutated. * @returns A new date object with the time converted form UTC */ export const utcToLocal = (date) => { const newDate = date.constructor(date.getTime()); newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset()); return newDate; }; /* istanbul ignore next */ /** * Get the current UTC Time * * @returns UTC Time */ export const getUtcTime = () => { const now = new Date(); return Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds()); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBUyxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFBO0FBZ0IzRiw4QkFBOEI7QUFDOUI7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBUztJQUN4QixDQUFDLEVBQUUsTUFBTTtJQUNULENBQUMsRUFBRSxPQUFPO0lBQ1YsQ0FBQyxFQUFFLEtBQUs7Q0FDWCxDQUFBO0FBQ0QsNkJBQTZCO0FBRTdCOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVksRUFBRSxTQUFTLEdBQUcsR0FBRyxFQUFVLEVBQUU7SUFDOUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUV2QyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDNUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDL0MsQ0FBQTtJQUVELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUN4QyxDQUFDLENBQUE7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBVSxFQUFFLFNBQXFCLE9BQU8sRUFBRSxTQUFTLEdBQUcsR0FBRyxFQUFVLEVBQUU7SUFDNUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8s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QUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFBO0tBQ3BEO1NBQU0sSUFBSSxPQUFPLEdBQUcsT0FBTyxFQUFFO1FBQzFCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQTtRQUVyQyxPQUFPLEdBQUcsR0FBRyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUE7S0FDcEQ7U0FBTSxJQUFJLE9BQU8sR0FBRyxNQUFNLEVBQUU7UUFDekIsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFBO1FBRW5DLE9BQU8sR0FBRyxHQUFHLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtLQUNsRDtTQUFNLElBQUksT0FBTyxHQUFHLFVBQVUsRUFBRTtRQUM3QixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUE7UUFFbEMsT0FBTyxHQUFHLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtLQUMzRDtTQUFNLElBQUksT0FBTyxHQUFHLFNBQVMsRUFBRTtRQUM1QixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUE7UUFFdEMsT0FBTyxHQUFHLE1BQU0sSUFBSSxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtLQUM3RDtJQUVELEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQTtJQUVyQyxPQUFPLEdBQUcsTUFBTSxJQUFJLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFBO0FBQzdELENBQUMsQ0FBQTtBQUVELGdEQUFnRDtBQUNoRCwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBaUIsSUFBTyxFQUFLLEVBQUU7SUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQU0sQ0FBQTtJQUVyRCxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFBO0lBRWhFLE9BQU8sT0FBTyxDQUFBO0FBQ2xCLENBQUMsQ0FBQTtBQUVELDBCQUEwQjtBQUMxQjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQVcsRUFBRTtJQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO0lBRXRCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDWCxHQUFHLENBQUMsY0FBYyxFQUFFLEVBQ3BCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFDakIsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUNoQixHQUFHLENBQUMsV0FBVyxFQUFFLEVBQ2pCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFDbkIsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUNuQixHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FDM0IsQ0FBQTtBQUNMLENBQUMsQ0FBQSJ9