Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m47s
106 lines
3.1 KiB
JavaScript
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;
|
|
}
|
|
|
|
|