generated from VLADIMIR/template_frontend
update
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
export function formatRussianDate(dateStr: string): string {
|
||||
// 1. Вытаскиваем только саму дату (2026-03-24) с помощью регулярного выражения
|
||||
// Это защитит нас от багов с часовыми поясами при парсинге
|
||||
const match = dateStr.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
||||
if (!match) {
|
||||
throw new Error("Неверный формат входной строки");
|
||||
}
|
||||
|
||||
// 2. Преобразуем строки в числа
|
||||
const year = parseInt(match[1], 10);
|
||||
const month = parseInt(match[2], 10);
|
||||
const day = parseInt(match[3], 10);
|
||||
|
||||
// 3. Создаем объект даты (обратите внимание: в JS месяцы начинаются с 0, поэтому month - 1)
|
||||
const dateObj = new Date(year, month - 1, day);
|
||||
|
||||
// 4. Словари для точного форматирования (родительный падеж для месяцев)
|
||||
const monthsRu = [
|
||||
"января", "февраля", "марта", "апреля", "мая", "июня",
|
||||
"июля", "августа", "сентября", "октября", "ноября", "декабря"
|
||||
];
|
||||
|
||||
// В JS 0 - это воскресенье, 1 - понедельник и т.д.
|
||||
const weekdaysRu = [
|
||||
"воскресенье", "понедельник", "вторник", "среда",
|
||||
"четверг", "пятница", "суббота"
|
||||
];
|
||||
|
||||
// 5. Получаем нужные значения
|
||||
const monthName = monthsRu[dateObj.getMonth()];
|
||||
const weekdayName = weekdaysRu[dateObj.getDay()];
|
||||
|
||||
// 6. Собираем итоговую строку
|
||||
return `${weekdayName} ${day} ${monthName}`;
|
||||
}
|
||||
|
||||
export function getRelativeDayName(dateStr: string): string {
|
||||
// 1. Вытаскиваем только дату (например, 2026-03-24)
|
||||
const match = dateStr.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
||||
if (!match) {
|
||||
throw new Error("Неверный формат входной строки");
|
||||
}
|
||||
|
||||
const year = parseInt(match[1], 10);
|
||||
const month = parseInt(match[2], 10) - 1; // Месяцы в JS начинаются с 0
|
||||
const day = parseInt(match[3], 10);
|
||||
|
||||
// 2. Создаем объект целевой даты и сбрасываем время в 00:00:00
|
||||
const targetDate = new Date(year, month, day, 0, 0, 0, 0);
|
||||
|
||||
// 3. Создаем объект СЕГОДНЯШНЕЙ даты и тоже сбрасываем время в 00:00:00
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
|
||||
// 4. Вычисляем разницу в миллисекундах и переводим в дни
|
||||
// Используем Math.round, чтобы избежать багов при переходе на летнее/зимнее время
|
||||
const diffInMs = targetDate.getTime() - today.getTime();
|
||||
const diffInDays = Math.round(diffInMs / (1000 * 60 * 60 * 24));
|
||||
|
||||
// 5. Возвращаем результат в зависимости от разницы в днях
|
||||
switch (diffInDays) {
|
||||
case 0:
|
||||
return "сегодня";
|
||||
case 1:
|
||||
return "завтра";
|
||||
case 2:
|
||||
return "послезавтра"; // бонус :)
|
||||
case -1:
|
||||
return "вчера"; // бонус :)
|
||||
default:
|
||||
// Если это не сегодня и не завтра, можно вернуть пустую строку,
|
||||
// либо просто количество дней, либо отформатированную дату (как в прошлом ответе)
|
||||
return "";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user