Files
router-lists-ui/frontend/src/lib/datetime.js
T

106 lines
3.1 KiB
JavaScript

function pad(num) {
return String(num).padStart(2, '0');
}
/**
* Форматирует дату в формате DD.MM.YYYY HH:mm:ss
* @param {Date|string|number} input - Дата
* @returns {string}
*/
export function formatDateTime(input) {
if (!input) return '';
const d = input instanceof Date ? input : new Date(input);
if (Number.isNaN(d.getTime())) return '';
const day = pad(d.getDate());
const month = pad(d.getMonth() + 1);
const year = d.getFullYear();
const h = pad(d.getHours());
const m = pad(d.getMinutes());
const s = pad(d.getSeconds());
return `${day}.${month}.${year} ${h}:${m}:${s}`;
}
/**
* Форматирует дату в формате DD.MM.YYYY HH:mm (без секунд)
* @param {Date|string|number} input - Дата
* @returns {string}
*/
export function formatDateTimeShort(input) {
if (!input) return '';
const d = input instanceof Date ? input : new Date(input);
if (Number.isNaN(d.getTime())) return '';
const day = pad(d.getDate());
const month = pad(d.getMonth() + 1);
const year = d.getFullYear();
const h = pad(d.getHours());
const m = pad(d.getMinutes());
return `${day}.${month}.${year} ${h}:${m}`;
}
/**
* Форматирует время в формате HH:mm:ss
* @param {Date|string|number} input - Дата
* @returns {string}
*/
export function formatTime(input) {
if (!input) return '';
const d = input instanceof Date ? input : new Date(input);
if (Number.isNaN(d.getTime())) return '';
const h = pad(d.getHours());
const m = pad(d.getMinutes());
const s = pad(d.getSeconds());
return `${h}:${m}:${s}`;
}
/**
* Возвращает текущую дату/время в формате DD.MM.YYYY HH:mm:ss
* @returns {string}
*/
export function now() {
return formatDateTime(new Date());
}
/**
* Форматирует дату в человекочитаемом формате: "24 декабря 2025, 15:30"
* @param {Date|string|number} input - Дата
* @returns {string}
*/
export function formatDateTimeHuman(input) {
if (!input) return '';
const d = input instanceof Date ? input : new Date(input);
if (Number.isNaN(d.getTime())) return '';
return d.toLocaleString('ru-RU', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit'
});
}
export function formatRelative(input) {
if (!input) return '';
const d = input instanceof Date ? input : new Date(input);
if (Number.isNaN(d.getTime())) return '';
const diffMs = Date.now() - d.getTime();
const sec = Math.floor(diffMs / 1000);
if (sec < 5) return 'только что';
if (sec < 60) return `${sec} сек назад`;
const min = Math.floor(sec / 60);
if (min < 60) return `${min} мин назад`;
const hr = Math.floor(min / 60);
if (hr < 24) return `${hr} ч назад`;
const days = Math.floor(hr / 24);
return `${days} дн назад`;
}
export function formatDateTimeWithRelative(input) {
const abs = formatDateTime(input);
const rel = formatRelative(input);
if (!abs && !rel) return '';
if (abs && rel) return `${abs} (${rel})`;
return abs || rel;
}