@voiceflow/common
Version:
Junk drawer of utility functions
67 lines (66 loc) • 1.79 kB
JavaScript
import dayjs from 'dayjs';
import advancedFormat from 'dayjs/plugin/advancedFormat.js';
import customParseFormat from 'dayjs/plugin/customParseFormat.js';
import duration from 'dayjs/plugin/duration.js';
import minMax from 'dayjs/plugin/minMax.js';
import relativeTime from 'dayjs/plugin/relativeTime.js';
import updateLocale from 'dayjs/plugin/updateLocale.js';
import utc from 'dayjs/plugin/utc.js';
dayjs.extend(utc);
dayjs.extend(duration);
dayjs.extend(relativeTime);
dayjs.extend(customParseFormat);
dayjs.extend(minMax);
dayjs.extend(advancedFormat);
dayjs.extend(updateLocale);
// https://day.js.org/docs/en/customization/relative-time
dayjs.updateLocale('en', {
relativeTime: {
future: 'in %s',
past: '%s ago',
s: 'seconds',
m: 'a minute',
mm: '%d minutes',
h: 'an hour',
hh: '%d hours',
d: 'a day',
dd: '%d days',
M: 'a month',
MM: '%d months',
y: 'a year',
yy: '%d years',
},
});
export const getCurrentTimestamp = () => Math.floor(Date.now() / 1000);
export const getTimeDuration = (pastTime) => {
const diff = dayjs().utc().diff(pastTime);
return dayjs.duration(diff).humanize();
};
export const getAbbrevatedFormat = (time) => time
.split(' ')
.map((str) => {
if (str.includes('month')) {
return 'mo';
}
if (str.includes('day')) {
return 'd';
}
if (str.includes('hour')) {
return 'hr';
}
if (str.includes('minute')) {
return 'm';
}
if (str.includes('second')) {
return 's';
}
if (str.includes('a')) {
return '1';
}
if (str.includes('a') || str.includes('few')) {
return null;
}
return str;
})
.filter(Boolean)
.join('');