mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
that's how 4chan does it, it makes sense since the theme is distracting especially on desktop
78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import i18next from 'i18next';
|
|
|
|
export const getFormattedDate = (commentTimestamp: number) => {
|
|
if (commentTimestamp === undefined || isNaN(commentTimestamp)) {
|
|
return '';
|
|
}
|
|
const locale = i18next.language || 'en';
|
|
const string = new Intl.DateTimeFormat(locale, {
|
|
hour12: false,
|
|
year: '2-digit',
|
|
month: '2-digit',
|
|
day: '2-digit',
|
|
weekday: 'short',
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
second: '2-digit',
|
|
}).format(new Date(commentTimestamp * 1000));
|
|
if (locale.startsWith('ar')) {
|
|
return string;
|
|
}
|
|
const items = string.split(/,* /);
|
|
if (items.length === 3) {
|
|
const itemIsNumber = [items[0][0].match(/[0-9]/), items[1][0].match(/[0-9]/)];
|
|
if (itemIsNumber[0] && itemIsNumber[1]) {
|
|
return `${items[0]}(${items[2]})${items[1]}`;
|
|
}
|
|
if (itemIsNumber[0] && !itemIsNumber[1]) {
|
|
return `${items[0]}(${items[1]})${items[2]}`;
|
|
}
|
|
if (!itemIsNumber[0] && itemIsNumber[1]) {
|
|
return `${items[1]}(${items[0]})${items[2]}`;
|
|
}
|
|
}
|
|
return string;
|
|
};
|
|
|
|
export const getFormattedTimeAgo = (unixTimestamp: number): string => {
|
|
const currentTime = Date.now() / 1000;
|
|
const timeDifference = currentTime - unixTimestamp;
|
|
const t = i18next.t;
|
|
|
|
if (timeDifference < 120) {
|
|
return t('time_1_minute_ago');
|
|
}
|
|
if (timeDifference < 3600) {
|
|
return t('time_x_minutes_ago', { count: Math.floor(timeDifference / 60) });
|
|
}
|
|
if (timeDifference < 7200) {
|
|
return t('time_1_hour_ago');
|
|
}
|
|
if (timeDifference < 86400) {
|
|
return t('time_x_hours_ago', { count: Math.floor(timeDifference / 3600) });
|
|
}
|
|
if (timeDifference < 172800) {
|
|
return t('time_1_day_ago');
|
|
}
|
|
if (timeDifference < 2592000) {
|
|
return t('time_x_days_ago', { count: Math.floor(timeDifference / 86400) });
|
|
}
|
|
if (timeDifference < 5184000) {
|
|
return t('time_1_month_ago');
|
|
}
|
|
if (timeDifference < 31104000) {
|
|
return t('time_x_months_ago', { count: Math.floor(timeDifference / 2592000) });
|
|
}
|
|
if (timeDifference < 62208000) {
|
|
return t('time_1_year_ago');
|
|
}
|
|
return t('time_x_years_ago', { count: Math.floor(timeDifference / 31104000) });
|
|
};
|
|
|
|
export const isChristmas = (): boolean => {
|
|
const today = new Date();
|
|
const month = today.getMonth();
|
|
const day = today.getDate();
|
|
return month === 11 && (day === 24 || day === 25);
|
|
};
|