agm-dateformat
Version:
A simple date formatting library
67 lines (60 loc) • 2.42 kB
JavaScript
const agmFormatDate = (dateInput, format = 'dd/mm/yyyy') => {
let date;
function parseDate(input) {
const parsedDate = new Date(input);
if (isNaN(parsedDate.getTime())) {
throw new Error('Invalid date');
}
return parsedDate;
}
if (typeof dateInput === 'string') {
date = parseDate(dateInput);
} else if (typeof dateInput === 'number') {
date = new Date(dateInput);
} else if (dateInput instanceof Date) {
date = dateInput;
} else {
throw new Error('Unsupported date format');
}
if (isNaN(date.getTime())) {
throw new Error('Invalid date');
}
const day = String(date.getUTCDate()).padStart(2, '0');
const month = date.toLocaleString('default', { month: 'short' });
const monthFull = date.toLocaleString('default', { month: 'long' });
const monthNumber = String(date.getUTCMonth() + 1).padStart(2, '0');
const year = date.getUTCFullYear();
const yearShort = String(year).slice(-2);
const hours24 = date.getUTCHours();
const minutes = String(date.getUTCMinutes()).padStart(2, '0');
const ampm = hours24 >= 12 ? 'PM' : 'AM';
const hours12 = hours24 % 12 || 12;
const weekday = date.toLocaleDateString('en-US', { weekday: 'long' });
switch (format) {
case 'dd-mm-yyyy':
return `${day}-${monthNumber}-${year}`;
case 'dd/mm/yyyy':
return `${day}/${monthNumber}/${year}`;
case 'dd mmm yyyy':
return `${day} ${month} ${year}`;
case 'mmm dd yyyy':
return `${monthFull} ${day} ${year}`;
case 'ddd tt':
return `${date.toLocaleDateString('en-US', { weekday: 'short' })} ${hours12}:${minutes} ${ampm}`;
case 'mmm dd':
return `${month}-${day}`;
case 'dddd dd mmm yyyy':
return `${weekday}, ${day} ${monthFull} ${year}`;
case 'dd-mm-yy':
return `${day}-${monthNumber}-${yearShort}`;
case 'dd/mm/yy':
return `${day}/${monthNumber}/${yearShort}`;
case 'dd/mm/yyyy tt':
return `${day}/${monthNumber}/${year} ${hours24}:${minutes} ${ampm}`;
case 'dd-mm-yyyy tt':
return `${day}-${monthNumber}-${year} ${hours12}:${minutes} ${ampm}`;
default:
throw new Error('Unsupported format');
}
}
export default agmFormatDate;