62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
export const DAYS = [
|
|
'Sunday',
|
|
'Monday',
|
|
'Tuesday',
|
|
'Wednesday',
|
|
'Thursday',
|
|
'Friday',
|
|
'Saturday',
|
|
];
|
|
|
|
export function formatMonth(iso: string) {
|
|
const date = new Date(iso);
|
|
const dd = date.getDate().toString();
|
|
const mm = (date.getMonth() + 1).toString();
|
|
return `${dd}/${mm}`;
|
|
}
|
|
|
|
function twelveHour(twentyFourHour: string) {
|
|
const [hourString, minute] = twentyFourHour.split(':');
|
|
const hour = +hourString % 24;
|
|
return (hour % 12 || 12) + ':' + minute + (hour < 12 ? ' AM' : ' PM');
|
|
}
|
|
|
|
function dayOfWeek(iso: string) {
|
|
const date = new Date(iso);
|
|
const day = date.getDay();
|
|
const target = DAYS[day === 0 ? 0 : day - 1];
|
|
return target.slice(0, 3);
|
|
}
|
|
|
|
/**
|
|
* @param iso ISO formatted date, e.g. 1996-12-24T14:03:04
|
|
* @param kind Intended format for the date, e.g. '%Y-%m-%d %H:%M'
|
|
*/
|
|
export function format(iso: string, kind: string) {
|
|
const split = iso.split('T');
|
|
const [year, month, day] = split[0].split('-');
|
|
const time = twelveHour(split[1]);
|
|
switch (kind) {
|
|
case '%Y-%m-%d %H:%M':
|
|
return iso.replace('T', ' ').replace(/:\d{2}/, '');
|
|
case '%Y-%m-%d':
|
|
return split[0];
|
|
case '%H:%M':
|
|
return split[1].replace(/:\d{2}/, '');
|
|
case '%d/%m/%y %h:%M %p':
|
|
return `${day}/${month}/${year} ${time}`;
|
|
case '%d/%m %h:%M %p':
|
|
return `${day}/${month} ${time}`;
|
|
case '%d/%m/%y':
|
|
return `${day}/${month}/${year}`;
|
|
case '%d/%m':
|
|
return `${day}/${month}`;
|
|
case '%h:%M %p':
|
|
return time;
|
|
case '%A %h:%M %p':
|
|
return dayOfWeek(iso) + ' ' + time;
|
|
default:
|
|
return iso;
|
|
}
|
|
}
|