/
PostmenBlake
/
NotificationPreferencesService
Обзор
Документация
Войти
/
PostmenBlake
/
NotificationPreferencesService
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/domain/value-objects/QuietHours.ts
46 строк
1 KB
kurava
feat: initial commit - Notification Preferences Service
17 июн 2026, 09:11
17 июн 2026, 09:11
48825c3
Код
Авторство
О чём код?
export interface QuietHours { start: string; // HH:mm format end: string; // HH:mm format timezone: string; } export const isValidQuietHours = (quietHours: QuietHours): boolean => { const timeRegex = /^([0-1][0-9]|2[0-3]):[0-5][0-9]$/; if (!timeRegex.test(quietHours.start) || !timeRegex.test(quietHours.end)) { return false; } try { Intl.DateTimeFormat(undefined, { timeZone: quietHours.timezone }); return true; } catch { return false; } }; export const isWithinQuietHours = ( quietHours: QuietHours, datetime: Date ): boolean => { const timeStr = datetime.toLocaleTimeString('en-US', { hour12: false, timeZone: quietHours.timezone }); // Simple comparison for now - could be enhanced const [hours, minutes] = timeStr.split(':').map(Number); const currentMinutes = hours * 60 + minutes; const [startHours, startMinutes] = quietHours.start.split(':').map(Number); const [endHours, endMinutes] = quietHours.end.split(':').map(Number); const startMinutesTotal = startHours * 60 + startMinutes; const endMinutesTotal = endHours * 60 + endMinutes; if (startMinutesTotal <= endMinutesTotal) { return currentMinutes >= startMinutesTotal && currentMinutes < endMinutesTotal; } else { // Crosses midnight return currentMinutes >= startMinutesTotal || currentMinutes < endMinutesTotal; } };