Даты и время
Полный справочник по времени: даты, арифметика длительностей, часы, часовые пояса, таймстемпы и ISO, Timespan, видео-таймкод, рабочие календари и особые даты.
Numlex рассматривает даты и время как полноценные величины со строгой, ограниченной
грамматикой. Строка либо точно соответствует образцу даты или времени, либо остаётся обычной
прозой — May 5 + 3 weeks работает, May 5 + 43 — ошибка, а одинокое слово-месяц не
является датой. Календарная арифметика компонентная, по локальному григорианскому
календарю, поэтому переход на летнее время не может сдвинуть
день.
Эта страница — полный справочник по времени: календарные даты, арифметика длительностей,
часы и laptime, часовые пояса, таймстемпы и ISO 8601, нотация Timespan, видео-таймкод и
кадры, рабочие календари, особые даты, их зависимость от настроек и строгие правила
ошибок.
Календарные даты
<date> [ <sign> <integer> <duration> ... ]
<date> := today | tomorrow | yesterday
| <month> <day>
| <month> <day>, <year>
| <day> <month> [<year>]
<duration> := day(s) | week(s) | month(s) | year(s)
Все слова английские и не зависят от регистра; знак — + или − (ASCII - тоже
работает). Месяцы, сокращённые и полные:
| № | Сокращения | Полное название |
|---|---|---|
| 1 | jan | january |
| 2 | feb | february |
| 3 | mar | march |
| 4 | apr | april |
| 5 | may | may |
| 6 | jun | june |
| 7 | jul | july |
| 8 | aug | august |
| 9 | sep, sept | september |
| 10 | oct | october |
| 11 | nov | november |
| 12 | dec | december |
today, tomorrow и yesterday разрешаются по захваченной локальной дате и
комбинируются с длительностями. Составные периоды применяются по компонентам календаря:
March 12 + 3 weeks 2 days → Apr 4, May 10 - 1 week 3 days. Каждый компонент
ограничен 1 000 000.
Результат показывает год, если год задан во вводе или результат выходит за год ввода. Привязка — локальный полдень, поэтому переходы DST никогда не сдвигают день.
today → today (per the local calendar)
tomorrow + 1 month
yesterday - 2 weeks
May 5 → May 5 (current year)
May 5, 2026 + 30 days → Jun 4, 2026
5 May 2026
dec 31
Ошибки синтаксиса дат:
- Периоды больше 1 000 000 — скрытая ошибка.
Feb 30имеет форму даты, но недействителен — скрытая ошибка.May 5 + 43(число без слова длительности) — ошибка, никогда не «сбрасывается» в обычную арифметику.May 5 + 43 days extra— хвост после валидной даты — ошибка.- Одинокое слово-месяц (
may) не является датой; оно остаётся прозой.
Арифметика длительностей
Несколько фиксированных единиц времени подряд читаются как одна длительность:
1 h 45 min,1 hour 45 minutes,2 hr 5 mins,1 day 2 hours 30 min,1 min 250 ms,1 week 2 days.- Склеенные безопасные формы:
1h45min,45min,30sec,500ms,2hr,2wks,1day2hours30min. Склеенные алиасы берутся только из белого списка (ms s sec secs second(s) min mins minute(s) h hr hrs hour(s) day(s) week(s) wk wks); одиночная склееннаяmникогда не минуты (5m= 5 000 000,5 m= метры), а одиночная склееннаяsне принимается. - Составные длительности используют фиксированные единицы от
msдоweek. Средние календарные единицы (mo,yr,quarter (time)) и посторонние единицы не компонуются неявно:1 m 20 cm— ошибка,1 mo 2 daysне компонуется.
Компоненты могут идти в любом порядке и повторяться; значения суммируются. Группа связывается в один первичный операнд до умножения или деления:
1 h 30 min / 3 → 30 min (not 1 h 10 min)
(1 h 20 min) × 2 → 2 h 40 min
3 × (1 h 15 min) → 3 h 45 min
1 h 45 min + 30 min → 2 h 15 min
2 hr 10 min - 45 min → 1 h 25 min
1 day 2 h + 90 min → 1 day 3 h 30 min
1 week 2 days - 1 day → 1 week 1 day
2 min 30 sec × 3 → 7 min 30 s
1 min 250 ms + 750 ms → 1 min 1 s
1.5 h + 30 min → 2 h
Длительность остаётся настоящей типизированной величиной (размерность T¹, реальная
единица времени, значение в её шкале) — не строкой и не безразмерными секундами.
Скобки, унарный минус, переменные и константы, содержащие время, работают
(focus time = 1 h 30 min, затем focus time + 15 min = 1 h 45 min), и длительности
токенизируются, как другие величины.
Вывод использует естественную каноническую разбивку (недели, дни, часы, минуты, секунды;
миллисекунды для субсекундного остатка), опускает нулевые компоненты, нормализует
переносы и печатает один знак: 2 h 15 min, 1 day 3 h 30 min, 7 min 30 s,
-30 min, 500 ms. Явная конвертация сбрасывает естественную форму к одноединичному
результату: 1 h 30 min to min = 90 min, 1 h 30 min in hours = 1.5 h,
1 h 30 min as seconds = 5400 s.
Скорости и производные единицы никогда не становятся длительностью (90 km / 3 h =
30 km/h), и синтаксис дат сохраняет приоритет (May 5 + 2 days — дата). У
длительностей нет управления нотацией или округлением для отдельного ответа.
Часы и laptime
Синтаксис часов проверяется до смешанных единиц и дат:
3:30pm + 2 hours 15 minutes → 5:45 pm
3:30pm - 2 hours 15 minutes → 1:15 pm
11:30pm + 45 min → Tomorrow 12:15 am
now + 3 hours 25 minutes → local wall time + 3 h 25 min
01:02:03 + 01:09:54 → 02:11:57 (elapsed time / laptime)
00:00:01.5 + 00:00:01 → 00:00:02.50
7:30am to 8:45pm → 13 h 15 min (interval forward)
4pm to 3am → 11 h
3:30pm as laptime → 15:30:00
Принимаются формы h:mm, h:mm:ss, h am/pm и 4pm; AM/PM не зависит от регистра и
может быть склеен или отделён пробелом. Минуты и секунды — 0…59, 12-часовой час —
1…12, 24-часовой — 0…23 (25:00 — строгая ошибка). Сложение и вычитание работают по
настенным компонентам, поэтому переход DST не сдвигает запрошенные минуты, а
перенос суток печатает Yesterday/Today/Tomorrow. clock + clock
(3:30pm + 3:30pm) — строгая ошибка; голое h:mm:ss без AM/PM остаётся истекшим
временем, а не моментом дня. Отображение следует региону: 12 часов для legacy/Северной
Америки, 24 часа для Европы, цикл часов локали для System. Часовые строки исключены из
Total, не имеют нотации и округления (только Copy/Delete) и не могут стать числовыми
токенами.
Часовые пояса
time in Paris → current time in the zone
Tokyo time → same, "<place> time" form
date in Vancouver → date in the zone
6pm Sydney in Chicago → 3:00 am
2am PST to GMT → 10:00 am
3pm GMT+8 to Paris → 9:00 am
7:30am LAX to Japan → 11:30 pm
time difference between Chicago and Paris → 7 h
difference between PDT & AEST → 17 h
Источник разрешается по полному офлайн-каталогу: IANA-идентификаторы и алиасы, города
(с уточнением City, CC), названия стран, коды стран, коды IATA/ICAO, фиксированные
аббревиатуры (EST/EDT/CST/CDT/MST/MDT/PST/PDT/AKST/AKDT/HST, AEST/AEDT/ACST/ACDT/AWST/
NZST/NZDT/BST/CET/CEST/EET/EEST/MSK/JST/KST/HKT/SGT) и GMT/UTC/GMT±H[:MM].
Настенное время источника привязывается к захваченной дате в его зоне,
преобразуется в один абсолютный момент и отображается в целевой зоне, поэтому A → B → A
сохраняет момент; реальные переходы DST учитываются, а несуществующее время в источнике
— строгая ошибка. Неизвестное место в строке-часовом-поясе — строгая ошибка. Голое
6pm, даты и гео-строки обрабатываются по своим правилам. Пользовательские алиасы
(Settings → Dates & Times) переопределяют только известные имена/IANA-идентификаторы и
живут в приложении — никогда в .nlx.
Офлайн-каталог часовых поясов
Приложение несёт каталог часовых поясов (около 1 МБ): IANA-идентификаторы и алиасы, города с населением не менее 100 000, страна → столичная зона, IATA/ICAO → зона. Данные собраны из публичных источников (IANA tzdata, GeoNames, airportsdata) и используются полностью офлайн; сеть не требуется.
Таймстемпы и ISO 8601
Строгая полоса таймстемпов идёт до конвертаций единиц и обычного датового fallback:
current timestamp → 1,554,112,800 (number from captured now)
April 1, 2019 3:30pm as iso8601 → 2019-04-01T15:30:00+02:00
2019-04-01T15:30:00 to date → Apr 1, 2019 3:30:00 pm
April 1, 2019 to timestamp → 1,554,112,800
1559740303.48 to date → Jun 5, 2019 3:11:43 pm
1733823083000 to date → Dec 10, 2024 10:31:23 am
Секунды — Unix-время от 1970-01-01T00:00:00Z; конечные дробные значения допустимы.
Значения от 1e12 и выше считаются миллисекундами (1733823083000 to date). Дата без времени для
to timestamp привязывается к локальному полудню (DST-безопасно). Форма ISO принимает
Z, ±HH:MM, опциональные секунды и дробную часть; явное смещение сохраняется как зона
представления, иначе используется ваша локальная зона. Вывод ISO —
yyyy-MM-dd'T'HH:mm:ssXXX; вывод date-time следует региональному 12/24-часовому стилю с
фиксированным английским порядком (Apr 1, 2019 3:30 pm). Некорректные,
несуществующие (DST-разрыв) и переполняющие значения — строгие ошибки. Датовые/ISO-строки
исключены из Inline- и Footer-Total и из числовой цепочки Previous Answer; токены на них
остаются безопасно неактивными.
Timespan
Нотация Timespan выбирается глобально (Numbers → Default answer format) или для
отдельного ответа (Number Format в контекстном меню) и применяется только к
величинам размерности времени; любое не-временное число падает в
Automatic. Явный суффикс as timespan работает независимо от настройки:
5.5 minutes as timespan → 5 min 30 s
4.54 hours as timespan → 4 hours 32 minutes 24 seconds
72 days as timespan → 10 weeks 2 days
3 hours 5 minutes 10 seconds → 3 h 5 min 10 s
3h 5m 10s in seconds → 11,110 s
Форматтер жадно раскладывает по средним единицам yr = 365.2425 d и mo = 30.436875 d,
затем по неделям, дням, часам, минутам, секундам и ms; печатает один знак после
запятой, опускает нулевые компоненты и переносит округление в старший компонент. Средние
yr/mo — только линейные факторы: календарная арифметика (+ 1 month) по-прежнему
использует компоненты Calendar. Грамматика склеенных единиц: внутри уже доказанной
цепочки длительности 3h 5m 10s буквы m и s означают минуты и секунды; одиночные
5m (5 000 000), 5 m (метры) и 10s не меняются. in seconds/in minutes/… сбрасывает
к одиночной стандартной презентации. Та же типизированная грамматика обслуживает обычные
строки, присваивания и выражения Answer Token.
Видео-таймкод и кадры
Строгая полоса таймкода идёт до часовой и смешанной полос:
03:10:20:05 at 30 fps + 50 frames → 03:10:21:25
00:10:20:50 @ 60 fps + 10 minutes → 00:20:20:50
00:30:10:00 @ 24 fps in frames → 43,440 frames
43,440 frames @ 24 fps → 00:30:10:00
03:10:20:05 at 30 fps + 03:10:20:010 → 06:20:40:15
03:10:20:05 at 12 fps - 00:20:35:00 → 02:49:45:05
30 fps × 3 minutes → 5,400 frames
15.6k frames / 24 fps → 650 s
Кадры считаются точно (никогда через округлённые секунды): fps — целое от 1 до
1000, drop-frame синтаксиса нет.
Внутри выражения таймкода fps означает кадры в секунду; вне него прежний скоростной алиас fps =
ft/s сохраняется. FPS обязателен в любой операции; конфликт частот, отсутствие fps,
выход за диапазон, переполнение счётчика кадров и битые коды — строгие ошибки. Поле кадров
нормализует переносы и печатается минимум двумя цифрами (вход :010 принимается). Строки
таймкода и кадров исключены из Total, округления и числовой цепочки Previous Answer;
токены на них неактивны.
Рабочие календари и праздники
Рабочий день — понедельник–пятница минус государственные праздники выбранного региона. Диапазоны дат — start-exclusive/end-inclusive; отсутствующий год использует захваченный текущий. Неподдерживаемые регион или год — строгая ошибка, а не молчаливое игнорирование праздников.
workdays in 3 weeks → 15 workdays
10 March to 17 March in workdays → 5 workdays
workdays from April 12 to June 15 → 44 workdays
$500/workday × 4 weeks → $10,000.00
work hours in June → 6 day 16 h
work hours between March 12 and March 25 → 3 day
55h in work days → 6.875 workdays
December 24 + 2 workdays → Dec 29
Алиасы: workday(s), work day(s), business day(s), weekday(s); запрос
weekday on <date> и обычная проза не захватываются. Недатированные недели считают пять
рабочих дней в неделю. Часы работы — типизированные длительности; денежная ставка за
рабочий день сохраняет валютный вид; часы в рабочем дне берутся из настроек (1…24).
Праздники — встроенный офлайн-каталог (25 стран, 2019–2035);
сеть не используется, а регион или год вне каталога — ошибка.
Особые даты
Эти особые даты встроены:
Easter → Apr 20 (captured current year)
Easter 2027 → Mar 28, 2027
Christmas → Dec 25
days until Christmas → 344 days
days until Easter → 95 days
Easter 2027 + 2 days → Mar 30, 2027
Пасха считается по григорианскому computus; ближайшее вхождение для
days until берёт дату текущего года, если она ещё в будущем, иначе следующего.
Неизвестное имя праздника (days until Festivus) — строгая ошибка, а проза со словами
christmas/easter не захватывается. Рождество — всегда 25 декабря.
Зависимости от настроек
Дата и время вычисляются от одного захваченного now на лист, локального
григорианского календаря и зоны и регионального стиля часов (12/24):
legacy/Северная Америка — 12 часов, Западная/Восточная
Европа — 24 часа, System следует циклу часов локали.
Сохраняемые настройки даты/времени:
- Часы в рабочем дне (1…24, по умолчанию 8) — используются рабочего времени и конверсиями рабочих дней.
- Регион праздников (по умолчанию
automatic); рабочие дни пропускают государственные праздники этого региона, а неподдерживаемые регионы падают строго в датированных запросах рабочих дней. - Пользовательские часовые пояса, до 100, каждый с именем и IANA-идентификатором.
Эти настройки глобальны для приложения и никогда не попадают в экспорт .nlx или в лист.
Итоги, токены и ошибки
- Строки часов, дат, таймстемпов/ISO и таймкода исключены из Inline- и Footer-Total, не имеют нотации и округления и не входят в числовую цепочку Previous Answer (токены на них остаются неактивными).
- Длительности — настоящие типизированные величины: они распространяются через переменные, константы и токены и ведут себя как другие величины в выражениях.
- Неизвестные места, неподдерживаемые регионы/годы рабочих дней, недействительные или несуществующие даты, недействительные часы, отсутствующий fps и переполняющие значения — строгие ошибки, а не угаданное число.
Связанные разделы
- Единицы и величины — каталог единиц, производные единицы и скоростные алиасы с теми же границами единиц времени.
- Настройки и внешний вид — категория Dates & Times в приложении и настройка формата ответа на вкладке Numbers.
- Естественные вычисления — примеры дат и времени в повседневных листах.