UNPKG

@datalayer/core

Version:
61 lines (60 loc) 1.8 kB
/* * Copyright (c) 2023-2025 Datalayer, Inc. * Distributed under the terms of the Modified BSD License. */ //- Taken from https://stackoverflow.com/questions/6108819/javascript-timestamp-to-relative-time // in miliseconds const units = { year: 24 * 60 * 60 * 1000 * 365, month: (24 * 60 * 60 * 1000 * 365) / 12, day: 24 * 60 * 60 * 1000, hour: 60 * 60 * 1000, minute: 60 * 1000, second: 1000 }; const rtf = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto', style: 'short' }); export const getRelativeTime = (d1, d2 = new Date()) => { const elapsed = d1.getTime() - d2.getTime(); // "Math.abs" accounts for both "past" & "future" scenarios for (const u in units) if (Math.abs(elapsed) > units[u] || u === 'second') return rtf.format(Math.round(elapsed / units[u]), u); return 'now'; }; //- const p = (i) => { return i > 1 ? 's' : ''; }; export const timeSince = (date) => { const seconds = Math.floor((new Date().getTime() - date.getTime()) / 1000); let interval = seconds / 31536000; if (interval > 1) { const i = Math.floor(interval); return i + ` year${p(i)}`; } interval = seconds / 2592000; if (interval > 1) { const i = Math.floor(interval); return i + ` month${p(i)}`; } interval = seconds / 86400; if (interval > 1) { const i = Math.floor(interval); return i + ` day${p(i)}`; } interval = seconds / 3600; if (interval > 1) { const i = Math.floor(interval); return i + ` hour${p(i)}`; } interval = seconds / 60; if (interval > 1) { const i = Math.floor(interval); return i + ` minute${p(i)}`; } const i = Math.floor(interval); return i + ` second${p(i)}`; };