Answer
t.me/js_testОтвет:
function formatDate(date) {
let dayOfMonth = date.getDate();
let month = date.getMonth() + 1;
let year = date.getFullYear();
let hour = date.getHours();
let minutes = date.getMinutes();
let diffMs = new Date() - date;
let diffSec = Math.round(diffMs / 1000);
let diffMin = diffSec / 60;
let diffHour = diffMin / 60;
year = year.toString().slice(-2);
month = month < 10 ? '0' + month : month;
dayOfMonth = dayOfMonth < 10 ? '0' + dayOfMonth : dayOfMonth;
hour = hour < 10 ? '0' + hour : hour;
minutes = minutes < 10 ? '0' + minutes : minutes;
if (diffSec < 1) {
return 'прямо сейчас';
} else if (diffMin < 1) {
return `${diffSec} сек. назад`;
} else if (diffHour < 1) {
return `${diffMin} мин. назад`;
} else {
return `${dayOfMonth}.${month}.${year} ${hour}:${minutes}`;
}
}
Объяснение:
Сначала получаем день месяца, номер месяца, год, час и минуты с помощью функций getDate, getMonth, getFullYear, getHours и getMinutes соответственно. Затем получаем разницу текущего времени с переданной датой с помощью математических преобразований. Обрезаем год до двух последних цифр и добавляем ведущий ноль нашим переменным если нужно. В конце проверяем: если разница в секундах меньше одной то возвращаем "прямо сейчас", если разница в минутах меньше одной то возвращаем `${diffSec} сек. назад`, если разница в часах меньше одного то возвращаем `${diffMin} мин. назад`, в любом другом случаем возвращаем полную дату.
Код для проверки:
function formatDate(date) {
let dayOfMonth = date.getDate();
let month = date.getMonth() + 1;
let year = date.getFullYear();
let hour = date.getHours();
let minutes = date.getMinutes();
let diffMs = new Date() - date;
let diffSec = Math.round(diffMs / 1000);
let diffMin = diffSec / 60;
let diffHour = diffMin / 60;
year = year.toString().slice(-2);
month = month < 10 ? '0' + month : month;
dayOfMonth = dayOfMonth < 10 ? '0' + dayOfMonth : dayOfMonth;
hour = hour < 10 ? '0' + hour : hour;
minutes = minutes < 10 ? '0' + minutes : minutes;
if (diffSec < 1) {
return 'прямо сейчас';
} else if (diffMin < 1) {
return `${diffSec} сек. назад`;
} else if (diffHour < 1) {
return `${diffMin} мин. назад`;
} else {
return `${dayOfMonth}.${month}.${year} ${hour}:${minutes}`;
}
}
console.log(formatDate(new Date(new Date() - 1))); // "прямо сейчас"
console.log(formatDate(new Date(new Date() - 30 * 1000))); // "30 сек. назад"
console.log(formatDate(new Date(new Date() - 5 * 60 * 1000))); // "5 мин. назад"
console.log(formatDate(new Date(new Date() - 86400 * 1000))); // вчерашняя дата (например 18.11.2022, 20:00)