Chrono Mock
МоваУкраїнська

Яку дату варто протестувати?

Половина тестування дат — зсунути годинник. Друга половина — знати, куди його зсувати. Онлайн-калькулятор скаже, яке число буде за дев’яносто днів від сьогодні. Він не скаже, що це банківський вихідний або останній день кварталу.

Калькулятор Chrono Mock. Ліворуч іде список сценаріїв із пошуком і їхніми поясненнями, посередині — конструктор дати, а колонка результатів праворуч перелічує всі формати з кнопкою копіювання біля кожного та Use this date під ними. Під конструктором вставлена дата 04/08/2008 позначена як неоднозначна, з показом і американського, і польського прочитання.
Під конструктором — зворотний напрям: вставлено 04/08/2008, і показано обидва прочитання, а не одне вгадане.

Робочі дні зі справжніми святами

«Через десять робочих днів» — це не арифметика: усе залежить від того, за календарем якої країни ви рахуєте. Та сама початкова дата, ті самі десять днів, дві різні відповіді:

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar us-banking
  result:  2027-09-16T00:00:00

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar pl
  result:  2027-09-15T00:00:00

Різниця в один день, і калькулятор пояснить чому, якщо запитати його про дату посередині:

$ chrono calc --base 2027-09-06T00:00:00 --calendar us-banking
  metadata:
    weekday       Monday
    business day  no  (us-banking)
    holiday       Labor Day
  what this date lands on:
    public holiday
    (weekend and holiday marks follow the us-banking calendar)

Сполучені Штати й Польща постачаються як еталонні календарі, обрані тому, що разом вони задіюють усі наявні типи правил: фіксовані дати, n-й день тижня місяця, дати, що обчислюються від Великодня, і американське правило, за яким свято, що випало на суботу, відзначається в попередню п’ятницю. Додати країну — це файл даних, а не зміна коду.

Усі формати одразу

Застосунку, що тестується, потрібна дата в тому вигляді, якого він чекає. Замість того щоб змушувати вас конвертувати, калькулятор друкує всі формати — і власну маску для тих, що не вкладаються в жоден стандарт.

$ chrono calc --preset year-2038 --zone +00:00
Chrono Mock - date calculator
  preset:   year-2038 - 2038 boundary
  explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)?
  result:  2038-01-19T03:14:07
  formats:
    ISO date      2038-01-19
    ISO datetime  2038-01-19T03:14:07+00:00
    US            01/19/2038
    PL            19.01.2038
    epoch (s)     2147483647
    epoch (ms)    2147483647000
    FILETIME      137919572470000000
    RFC 1123      Tue, 19 Jan 2038 03:14:07 GMT
  ...
  what this date lands on:
    at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)

Це значення epoch — не збіг: 2147483647 — це точно найбільше число, яке вміщує знакове 32-розрядне ціле, і вся причина, чому ця дата важлива.

Читання дати у зворотний бік

Зворотний напрям не менш корисний: вставте дату з логу й дізнайтеся, що це таке. Коли формат неоднозначний — а 04/08 неоднозначне в половині світу, — показуються обидва прочитання, а не вгадується одне, бо саме з вгадування народився початковий звіт про помилку.

$ chrono calc --analyze 04/08/2027
Chrono Mock - date analysis
  input:   04/08/2027  (ambiguous - month/day order differs by locale)
  US MM/DD/YYYY:  2027-04-08  (Thursday)
  PL DD/MM/YYYY:  2027-08-04  (Wednesday)

Різниця в чотири місяці, і дні тижня різні. Дата у форматі ISO однозначна й читається як є, а те, що взагалі не є датою, відхиляється, а не вгадується.

Будується з кроків, а не з фрази

Момент — це відправна точка плюс кроки, і проміжний результат показується після кожного, тож вираз, що дав несподівану відповідь, показує, де він звернув не туди. П’ять видів кроків: зсув на одиницю, встановлення часу доби, стрибок на межу періоду, перехід до найближчого робочого дня й переписування в іншому часовому поясі.

# Остання секунда перед зміною року
chrono calc --base today --snap eoy

# Дев’яносто робочих днів уперед за американським банківським календарем
chrono calc --base today --shift +90bd --calendar us-banking

# Вісімнадцять років і день тому — перевірка віку
chrono calc --base today --shift -18y --shift -1d

Будь-яка обчислена дата одразу йде в сесію підміни, а --json видає той самий результат у машинному вигляді. Дати, які варто тестувати →

Спробуйте