Блоки · Масиви та JSON
Калькулятор
Калькулятор — багатокрокові вирази над змінними контакта: математика, рядки, дати, списки, regex і логіка.
Призначення
Блок Калькулятор виконує один або кілька кроків виразів і записує результати у змінні контакта. Кожен наступний крок бачить змінні, записані попередніми кроками в цьому ж блоці.
Підходить для розрахунку ціни зі знижкою, форматування дати, перевірки балів квізу, роботи з JSON-списками та умовних значень без окремого блоку «Умова».
Синтаксис
- Змінні: `{name}` або `name` (якщо немає конфлікту з функцією)
- Математика: `2+2`, `10*1.2`, `10 % 3`, `2^8` (степінь)
- Порівняння: `{score} > 50`, `{status} == "done"`
- Функції: `upper({name})`, `addDays(now(), 7)`, `if(gt({score}, 50), "Так", "Ні")`
- Списки зберігаються як JSON-масив у текстовій змінній: `listCreate`, `listAdd`, `listGet`
Категорії функцій
- **Математика** — add, sub, mul, div, round, min, max, pow, mod, random…
- **Рядки** — concat, split, join, trim, replace, contains…
- **Дати** — now, addDays, diffDays, formatDate, formatDateUk, formatDateTime, weekdayName…
- **Списки** — listCreate, listAdd, listGet, listJoin, inList…
- **Regex** — match, findAll, replaceRegex
- **Логіка** — if, and, or, eq, gt, isEmpty…
- **JSON** — jsonGet, jsonParse, toNum, uuid…
Форматування дат
Функція formatDate форматує ISO-дату або результат `now()` / `addDays()` за шаблоном. Токени замінюються у порядку від довших до коротших:
- `YYYY` — повний рік (2026)
- `YY` — рік двозначно (26)
- `MMMM` — місяць називом у родовому відмінку (липня)
- `MMM` — скорочена назва місяця (лип)
- `MM` — місяць з нулем (07)
- `M` — місяць без нуля (7)
- `dddd` — день тижня повністю (п'ятниця)
- `ddd` — день тижня скорочено (пт)
- `DD` — день з нулем (09)
- `D` — день без нуля (9)
- `HH` — години з нулем (14)
- `H` — години без нуля (14)
- `mm` — хвилини з нулем (05)
- `ss` — секунди з нулем (08)
Приклади форматування
- Класичний формат: `formatDate(now(), "DD.MM.YYYY")` → 10.07.2026
- Дата і час: `formatDateTime(now())` → 10.07.2026 08:00 (UTC)
- Український текст: `formatDateUk(now())` → п'ятниця, 10 липня 2026
- День тижня: `weekdayName(now())` → п'ятниця; `weekdayName(now(), true)` → пт
- Дедлайн: `formatDate(addDays(now(), 3), "DD.MM.YYYY")`
Приклади
- Ціна з ПДВ: `round(mul({price}, 1.2), 2)` → змінна `price_vat`
- Дедлайн: `formatDate(addDays(now(), 3), "DD.MM.YYYY")`
- Статус квізу: `if(gte({quiz_score}, 70), "Зараховано", "Пересклад")`
- Поле з API: `jsonGet({http_body}, "data.order_id")`