From cdfe2f5a0aa90ab514ea96594752c4b7bcd2f074 Mon Sep 17 00:00:00 2001 From: kalugin66 Date: Tue, 7 Apr 2026 00:50:13 +0500 Subject: [PATCH] =?UTF-8?q?=D1=87=D0=B0=D1=82=20Asia/Yekaterinburg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notifications.js | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/notifications.js b/notifications.js index 386bb76..f14039e 100644 --- a/notifications.js +++ b/notifications.js @@ -234,7 +234,7 @@ function getStatusText(status) { /** * Отправляет сводку о непрочитанных сообщениях в чатах всем пользователям, - * у которых есть такие сообщения (раз в час). + * у которых есть такие сообщения (раз в час, только с 8 до 21 по часовому поясу сервера). */ async function sendChatSummaryNotifications() { const db = getDb(); @@ -243,6 +243,34 @@ async function sendChatSummaryNotifications() { return; } + // Определяем часовой пояс + const timezone = process.env.TIMEZONE || 'Asia/Yekaterinburg'; + const now = new Date(); + // Форматтер для полного времени (логирование) + const fullFormatter = new Intl.DateTimeFormat('ru-RU', { + timeZone: timezone, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + }); + // Форматтер только для часа + const hourFormatter = new Intl.DateTimeFormat('ru-RU', { hour: 'numeric', timeZone: timezone }); + const currentHour = parseInt(hourFormatter.format(now)); + + // Логируем текущее время и используемый час + console.log(`📅 Текущее время (${timezone}): ${fullFormatter.format(now)} (час: ${currentHour})`); + + // Проверка рабочего времени (8:00 – 21:00) + if (currentHour < 8 || currentHour >= 21) { + console.log(`🕒 [Чат-сводка] Пропущена: сейчас ${currentHour}:00 (рабочие часы 8-21), время отправки не наступило`); + return; + } + + console.log(`✅ [Чат-сводка] Рабочие часы, отправляем уведомления...`); + // Получаем всех пользователей, у которых включены email уведомления const users = await new Promise((resolve, reject) => { db.all(`