function checkISO(value) {
|
const regExpISO = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
|
|
return regExpISO.test(value);
|
}
|
|
/**
|
* Helper function to convert ms -> HHMMSS
|
* @param {number} ms
|
* @returns {string}
|
*/
|
export function msToHMS(ms) {
|
// 1- Convert to seconds:
|
let seconds = ms / 1000;
|
// 2- Extract hours:
|
const hours = Number.parseInt(seconds / 3600); // 3,600 seconds in 1 hour
|
|
seconds = seconds % 3600; // seconds remaining after extracting hours
|
// 3- Extract minutes:
|
const minutes = Number.parseInt(seconds / 60); // 60 seconds in 1 minute
|
// 4- Keep only seconds not extracted to minutes:
|
|
seconds = Math.floor(seconds); // % 60;
|
|
return `${hours}:${minutes}:${seconds}`;
|
}
|
|
/**
|
* Helper function to pretty date
|
*/
|
export function prettyDate(time) {
|
if (typeof time !== "string" && !(time instanceof Date) && !checkISO(time)) return;
|
|
const date = new Date(time);
|
const diff = (new Date().getTime() - date.getTime()) / 1000;
|
const day_diff = Math.floor(diff / 86400);
|
|
if (isNaN(day_diff) || day_diff < 0) return;
|
|
return (
|
(day_diff === 0 &&
|
((diff < 60 && "just now") ||
|
(diff < 120 && "1 minute ago") ||
|
(diff < 3600 && `${Math.floor(diff / 60)} minutes ago`) ||
|
(diff < 7200 && "1 hour ago") ||
|
(diff < 86400 && `${Math.floor(diff / 3600)} hours ago`))) ||
|
(day_diff === 1 && "Yesterday") ||
|
(day_diff < 7 && `${day_diff} days ago`) ||
|
(day_diff < 31 && `${Math.ceil(day_diff / 7)} weeks ago`) ||
|
`${day_diff} days ago`
|
);
|
}
|
|
export function toISODateString(date) {
|
date = date || new Date();
|
|
const tzOffest = date.getTimezoneOffset() * 60000;
|
const localISOTime = new Date(date.getTime() - tzOffest).toISOString().slice(0, -1);
|
|
return localISOTime;
|
}
|
|
/**
|
* Helper function to get current timezone
|
*/
|
export function currentISODate() {
|
return toISODateString();
|
}
|