Дата и время

Калькуляторы дат и времени: разница между датами, прибавление дней и месяцев, возраст, номер недели и дня года, unix timestamp. Всё считается в браузере.

Зачем нужна категория «Дата и время»

Даты в работе почти всегда приходят не в том виде, в котором нужны для ответа. В договоре стоит срок в днях, в заявлении — «за две недели», в выгрузке — длинное число, в отчёте — день недели вместо даты. Чтобы получить число для документа, приходится переводить одно в другое: считать разницу, прибавлять срок, определять возраст на дату, находить номер недели и границы квартала. Категория собирает инструменты под эту работу.

  • Договор подписан 12 марта, срок — 45 календарных дней: нужно понять, какое число вписывать в акт, не считая вручную по календарю.
  • Сотрудник выходит из отпуска 1 июля, а заявление написано «за 14 дней до»: сколько дней осталось и попадает ли конец срока на выходной.
  • Клиент говорит «мне 34» и просит подобрать тариф: возраст нужен точный, на конкретную дату, потому что от него зависит и условие, и день окончания полиса.
  • Команда планирует квартал: нужно разложить период на недели и месяцы, узнать номер недели для отчёта и день года, чтобы не разойтись с чужой таблицей.
  • В выгрузке из системы вместо даты стоит длинное число вроде 1755000000 — это момент в секундах от 1 января 1970 года, и читать его глазами невозможно.
  • Планировщик просит дату окончания подписки, которую нужно продлить ровно на год, — и надо заранее увидеть случаи вроде 29 февраля, где «плюс год» считается по-разному.

Внутри категории действует одно правило: инструмент решает одну задачу, а близкие варианты собраны режимами в нём же — направление расчёта, единицы срока, формат вывода, учёт часового пояса. Порядок работы обычно такой: сначала разобраться, что за дата на руках — календарный день или момент времени, — затем привести обе даты к одному формату, посчитать разницу или сдвиг и в конце проверить результат на граничных днях: конце месяца, 29 февраля, стыке годов.

Считает браузер: введённые даты не отправляются на сервер, не сохраняются и исчезают при обновлении вкладки. Поэтому сюда можно приносить сроки из договоров, даты сотрудников и выгрузки с реальными событиями. И помните, что часовой пояс берётся из настроек вашего устройства: если считать для другого региона, результат сдвинется — дату стоит задавать явно, а не полагаться на «сегодня».

Частые вопросы о категории

Чем дата отличается от момента времени и почему это важно?

Дата — это точка в календаре: день рождения, срок оплаты, дата подписания. Такой день не зависит от часового пояса: он одинаков и в Москве, и во Владивостоке, и в Лондоне. Момент времени — конкретная секунда, у которой есть часовой пояс: совещание в 15:00 по Москве, письмо, полученное в 12:04, событие в логе. Здесь уже нельзя сказать «12 марта», не уточнив, где именно. Отсюда практическое следствие: сроки, возраст и рабочие дни считают по календарным датам, а события, логи и timestamp — по моментам времени с учётом пояса. Если перепутать, разница будет не в минутах, а в сутках: например, «сегодня» для одного и того же события окажется разным в зависимости от того, где смотреть.

В каком часовом поясе считает инструмент?

В том, который стоит в настройках вашего устройства: браузер берёт его из системы. Поэтому один и тот же timestamp в Москве и в Новосибирске отобразится разными датами, и разница будет ровно в сдвиге пояса. Для календарных расчётов — срока, возраста, номера недели — пояс не важен, если даты заданы как «день-месяц-год». А вот при переводе timestamp и при сравнении событий их стоит приводить к одному поясу: UTC подходит как общая точка отсчёта, потому что его не переводят на летнее время и он одинаков для всех. Перевод в местное время — уже последний шаг, чтобы человеку было понятно, а не середина расчёта.

Данные уходят на сервер? Можно ли вводить реальные даты и дни рождения?

Ничего не отправляется: расчёт идёт в браузере на JavaScript, введённые даты не передаются по сети, не сохраняются и не логируются. Проверить это можно так: откройте страницу, отключите интернет и продолжите считать — результат не изменится. Поэтому сюда можно вводить даты сотрудников, клиентов и документов. Ограничение другое: история нигде не ведётся, и при обновлении вкладки введённое пропадёт, а если считать приходится регулярно — результат стоит записать в свой документ сразу.

Почему «плюс один год» иногда даёт другое число?

Потому что год — не фиксированное число дней: 365 или 366, а месяцы разной длины. Для 29 февраля при прибавлении года второй даты просто не существует, и её приходится выбирать: 28 февраля или 1 марта. Обе трактовки встречаются в жизни — банк и кадровая служба могут понимать это по-разному. Похожая ситуация с месяцами: «плюс месяц» к 31 января не имеет однозначного ответа. Поэтому в расчётах лучше задавать дату явно и проверять результат на граничных днях — конце месяца, 29 февраля, стыке годов. Практическое правило: сроки в документах безопаснее задавать конкретной датой, а не формулой «через год».

Как считать рабочие дни и учитывать выходные?

Арифметика календаря проста: каждый день считается независимо, и разница между двумя датами — это число прошедших суток. Рабочие дни так не считаются: нужно знать, какие дни в стране выходные, а они меняются каждый год — праздники переносят, и появляются дополнительные нерабочие дни. Такой календарь утверждают отдельно на год, и в разных странах он свой, поэтому универсальной формулы не существует. Безопасный порядок: посчитать общее число дней инструментом, а затем сверить, какие из них выпадают на выходные и праздники по своему производственному календарю. Если срок считается в банковских днях, уточняйте правило у того, кто его устанавливает.

Почему в двух отчётах один и тот же момент времени стоит с разницей в часы?

Чаще всего потому, что одна система хранит время в UTC, а другая — в локальном поясе, и обе записали его без пометки о поясе. Тогда одна и та же секунда выглядит как 12:00 и как 15:00 — разница ровно в сдвиге. Вторая причина — переход на летнее время: в тех поясах, где он есть, один момент в году повторяется дважды или пропускается час. Третья — округление: системы по-разному отбрасывают секунды и миллисекунды. Чтобы разобраться, переведите оба значения в один формат, лучше в UTC, и сравните: если разница кратна часам, дело в поясе, если минутам и секундам — в округлении или в разном моменте события.