Помесячная аренда авто: как сохранить день начала после февраля
5 мин чтения

Прокат подготовил календарь для долгосрочной аренды с 31 января. Первая граница приходится на 28 февраля, а следующая внезапно оказывается 28 марта. При этом сотрудник ожидал 31 марта. Причина может находиться не в длине аренды, а в способе вычисления: следующий месяц прибавили к уже укороченной февральской дате и потеряли первоначальный день.
Что именно означает месяц в вашем процессе
Сначала различите фиксированное число календарных дней и переход к следующему месяцу. Тридцать дней от даты и календарный месячный шаг — разные операции. Условия конкретного продукта нужно определить заранее; этот инструмент рассматривает только последовательность календарных месяцев. Он не выбирает подходящее правило вместо компании и не толкует договор.
Даже при месячном шаге остаётся выбор. Можно сохранять исходный номер дня, заменяя отсутствующее число последним днём целевого месяца. А можно привязывать все границы к концу месяца. При начале 31 января результаты совпадут, но при начале 28 февраля обычного года уже разойдутся.
| Номер границы | От исходного дня 31 | На месяц от предыдущего результата | Разница дат |
|---|---|---|---|
| 0 | 31 января | 31 января | 0 дней |
| 1 | 28 февраля | 28 февраля | 0 дней |
| 2 | 31 марта | 28 марта | 3 дня |
| 3 | 30 апреля | 28 апреля | 2 дня |
| 4 | 31 мая | 28 мая | 3 дня |
Оба ряда получены по определённым правилам. Ошибка возникает, когда используемое правило расходится с согласованным. Нельзя исправлять план случайным добавлением трёх дней: для апреля расхождение уже другое, а в високосном феврале изменится первая укороченная дата.
Исходный день должен сохраняться отдельно
Для режима day инструмент запоминает число из начальной даты. Затем для каждой границы отдельно определяет нужный год и месяц и выбирает меньшее из двух чисел: исходный день или последний день целевого месяца. Следующая граница не наследует укороченный номер из предыдущей.
В документации Microsoft к DateTime.AddMonths описано поведение с заменой несуществующего числа последним допустимым днём месяца. Но важно, к какой дате применяется операция. Два вызова «плюс один месяц» по цепочке не обязаны давать тот же результат, что вычисление «плюс два месяца» от первоначальной даты. Здесь этот случай показан отдельным сравнением.
Почему 28 февраля может вести к 28 или 31 марта
Если начало — 28 февраля 2026 года, режим day хранит исходный номер 28 и даёт 28 марта. Режим month-end хранит правило конца месяца и даёт 31 марта. В обоих случаях начальная дата была последним днём февраля. Самого факта «началось в последний день» недостаточно, чтобы узнать выбранное правило.
Как работает режим конца месяца
Режим month-end допускается в инструменте только для начала, уже приходящегося на последний день своего месяца. Каждая последующая граница становится последним днём целевого месяца. Это явное условие модели: для начала в середине месяца сначала понадобилось бы отдельно описать начальный неполный период, которого здесь нет.
Что означает показанный период
Между соседними границами инструмент выводит интервал с включённым началом и исключённым концом. Например, от 31 января до 28 февраля означает даты с 31 января по 27 февраля включительно. Следующий период начинается 28 февраля, поэтому соседние интервалы не перекрываются.
Количество дней здесь — разность календарных дат. Внутри расчёта используется единая арифметика дат, без местного времени браузера. Это не измерение реальных часов владения автомобилем и не правило посуточного тарифа. Если для операции важны часы выдачи, возврата или часовой пояс, их нужно моделировать отдельно.
Что проверить в рабочем сценарии
- Начало 31 января обычного года: февраль ограничивает день, март возвращает исходное число в режиме day.
- Начало 31 января високосного года: первая следующая граница — 29 февраля.
- Начало 30 апреля: day даёт 30 мая, month-end — 31 мая.
- Начало 29 февраля: после укороченного февраля следующего года правило исходного дня должно оставаться известным.
- Переход декабря в январь: меняется год, а не только номер месяца.
В инструменте задаются от одного до шестидесяти периодов. Границ будет на одну больше: начальная дата плюс завершение каждого периода. Рядом выводится сравнительный ряд последовательных месячных сдвигов с ограничением по текущему дню. Это помогает обнаружить отличие алгоритмов, а не назначает один ряд юридически обязательным.
Как использовать результат при выборе CRM
В материалах AUTO555 о долгосрочной аренде рассмотрены экономика и условия продукта. Для проверки календарного сценария подготовьте несколько начальных дат и ожидаемые границы. Покажите их при настройке выбранного процесса: отдельно выясните, как строятся периоды, создаются документы и учитываются оплаты.
Этот локальный календарь не создаёт договоры и счета в AUTO555 и не подтверждает наличие автоматического помесячного планировщика в конкретной версии системы. Его результат — набор проверяемых дат, по которому можно согласовать требования и увидеть расхождение до реальной работы с клиентом.
Построить календарные границы месячных периодов
Только даты и календарные месяцы. Для month-end начало должно быть концом месяца. Интервалы [начало, конец), без времени суток. Не расчёт тарифа, счёта, срока оплаты, выходных или неполного месяца; договор и платежи не создаются. Расчёт выполняется на вашем устройстве, введённые данные никуда не отправляются.
Auto555 — облачная CRM для автопроката: брони, договоры, выдача и приёмка, депозиты и финансы в одном окне.
Начать бесплатно