80 lines
2.8 KiB
JavaScript
80 lines
2.8 KiB
JavaScript
/**
|
||
* Утилиты для работы с московским временем (MSK, UTC+3)
|
||
*/
|
||
|
||
/**
|
||
* Получить текущее московское время
|
||
*/
|
||
function getMoscowTime() {
|
||
const now = new Date();
|
||
// Москва = UTC+3
|
||
// Получаем UTC время и добавляем 3 часа
|
||
const utcTime = now.getTime() + (now.getTimezoneOffset() * 60 * 1000);
|
||
const moscowOffset = 3 * 60 * 60 * 1000; // 3 часа в миллисекундах
|
||
return new Date(utcTime + moscowOffset);
|
||
}
|
||
|
||
/**
|
||
* Получить начало дня по московскому времени
|
||
*/
|
||
function getMoscowStartOfDay(date = null) {
|
||
const moscowTime = date ? new Date(date.getTime()) : getMoscowTime();
|
||
moscowTime.setHours(0, 0, 0, 0);
|
||
return moscowTime;
|
||
}
|
||
|
||
/**
|
||
* Получить текущую дату по московскому времени (начало дня)
|
||
*/
|
||
function getMoscowDate() {
|
||
return getMoscowStartOfDay();
|
||
}
|
||
|
||
/**
|
||
* Форматировать дату в московское время для логов
|
||
*/
|
||
function formatMoscowTime(date = null) {
|
||
const moscowTime = date ? new Date(date.getTime()) : getMoscowTime();
|
||
const year = moscowTime.getFullYear();
|
||
const month = String(moscowTime.getMonth() + 1).padStart(2, '0');
|
||
const day = String(moscowTime.getDate()).padStart(2, '0');
|
||
const hours = String(moscowTime.getHours()).padStart(2, '0');
|
||
const minutes = String(moscowTime.getMinutes()).padStart(2, '0');
|
||
const seconds = String(moscowTime.getSeconds()).padStart(2, '0');
|
||
|
||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds} MSK`;
|
||
}
|
||
|
||
/**
|
||
* Проверить, является ли дата сегодняшней по московскому времени
|
||
*/
|
||
function isMoscowToday(date) {
|
||
const today = getMoscowStartOfDay();
|
||
const checkDate = getMoscowStartOfDay(date);
|
||
return today.getTime() === checkDate.getTime();
|
||
}
|
||
|
||
/**
|
||
* Получить новогоднюю дату по московскому времени (1 января следующего года, 00:00 MSK)
|
||
*/
|
||
function getNewYearMoscow() {
|
||
const now = getMoscowTime();
|
||
const year = now.getFullYear() + 1;
|
||
// Создаем дату 1 января следующего года в московском времени
|
||
// Используем UTC и вычитаем смещение для получения правильного UTC времени
|
||
const moscowNewYear = new Date(Date.UTC(year, 0, 1, 0, 0, 0, 0));
|
||
// Вычитаем 3 часа, чтобы получить UTC время, которое при добавлении 3 часов даст 00:00 MSK
|
||
const moscowOffset = 3 * 60 * 60 * 1000;
|
||
return new Date(moscowNewYear.getTime() - moscowOffset);
|
||
}
|
||
|
||
module.exports = {
|
||
getMoscowTime,
|
||
getMoscowStartOfDay,
|
||
getMoscowDate,
|
||
formatMoscowTime,
|
||
isMoscowToday,
|
||
getNewYearMoscow
|
||
};
|
||
|