File: /var/www/quadcode/one-time-popup/src/utils/date/dateFormater.ts
export const formatDate = (dateString: string, lang = 'en') => {
const date = new Date(dateString);
const dateFormatter = new Intl.DateTimeFormat(lang, {
weekday: 'long',
year: 'numeric',
month: lang === 'en' ? 'long' : 'numeric',
day: 'numeric',
});
let preparedDate = dateFormatter.format(date);
if (lang !== 'en') {
preparedDate = preparedDate
.replace(/(\d+)\/(\d+)\/(\d+)/, '$2.$1.$3')
.replace(/(\d+)-(\d+)-(\d+)/, '$2.$1.$3');
} else {
const day = date.getDate();
const suffix =
day >= 11 && day <= 13
? 'th'
: ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'][day % 10];
preparedDate = preparedDate.replace(/\d+/, day + suffix);
}
const timeFormatter = new Intl.DateTimeFormat(lang, {
hour: 'numeric',
minute: 'numeric',
timeZoneName: 'short',
});
const preparedTime = timeFormatter
.formatToParts(date)
.map(({ type, value }) => {
return type === 'timeZoneName' ? `(${value})` : value;
})
.join('')
.replace(/\s+\(/, ' (');
return { preparedDate, preparedTime };
};