В истории операций Альфа-Банка у каждой строки подпись: когда и сколько. Intl.DateTimeFormat на части Android-устройств и в старом WebView даёт «21 окт.» вместо «21 октября», поэтому форматируем сами.
Напишите formatOperation(op, now). op = { amount, currency, at }: amount — целое в копейках (центах), минус — списание; currency — RUB, USD или EUR; at и now — местное время строкой ГГГГ-ММ-ДДTЧЧ:ММ, без часового пояса.
Дата: тот же календарный день, что now, — «Сегодня»; предыдущий — «Вчера»; иначе «8 марта», а если год другой — «31 декабря 2025». Месяц в родительном падеже. Время — как в at.
Сумма: знак «+» для поступлений и «−» (U+2212, не дефис) для списаний, ноль без знака. Рубли группируются по три цифры обычным пробелом, копейки — через запятую и только если они не нулевые. Символ валюты через пробел после числа: ₽, $, €. Итог: <дата>, <время> · <сумма>.
В работе: История операций, выписки, чеки, ленты событий с относительными датами.
Пример 1: сегодня, списание с копейками
{"amount": -125050, "currency": "RUB", "at": "2026-10-21T14:05"}, "2026-10-21T15:40""Сегодня, 14:05 · −1 250,50 ₽"
Пример 2: вчера, зарплата
{"amount": 1500000, "currency": "RUB", "at": "2026-10-20T09:00"}, "2026-10-21T15:40""Вчера, 09:00 · +15 000 ₽"
formatOperation — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 10: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function formatOperation({ amount, currency, at }, now) // → string
Источник: на задачах Альфа-Банка: история операций. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.