Command Palette

Search for a command to run...

Калькулятор разницы дат: подсчитывать дни между датами без ошибок

Калькулятор разницы дат: подсчитывать дни между датами без ошибок

T
Toolz Team
|Jul 12, 2026|19 Мин. читать

Часть коллекции Время и дата

Однажды я вернул клиенту 9 долларов из-за столба забора. В SaaS я строил 14-дневную пробную версию, и мой код пропорции вычислил «дни, используемые» как endDate - startDate за миллисекунды, разделенные на 86 400 000, округлены. Начните пробную версию в 23:00 1-го числа, конвертируйте в 1:00 15-го числа, а математика говорит 14 дней - но мысленная модель клиента и #39;s сказала "I зарегистрировалась на 1-й, тот и #39;s день первый, " который делает 15-й день пятнадцатым. Был ли пробный период 14 дней или 14 ночей? Мой код и моя страница цен не согласились друг с другом, и клиент заметил раньше, чем я.

Это то, что касается арифметики дат: вычитание тривиальна, а определение где все идет не так. инклюзивный или эксклюзивный подсчет. Будь то 31 января, 28 февраля, 2 марта или 3 марта. Будь "день" 24 часа, когда летнее время составляет один день в году 23 часа, а другой - 25. Каждый из них покусывал меня хотя бы раз, и я поставляю приложения Laravel и React уже более десяти лет.

равняется Калькулятор разницы дат существует, чтобы ответить на вопрос точно, чтобы вы могли проверить свои предположения - и ваш код - с известным-правильным результатом. тот, что на Toolz.dev вычисляет разрыв между любыми двумя датами в днях, неделях, месяцах, и годах, полностью в вашем браузере. я использую его постоянно: проверка периодов счета, проверка продолжительности контракта, расчет " сколько дней до запуска " дебаты в Slack со ссылкой вместо аргумента.

В этом руководстве рассказывается о том, как его использовать, и, что более полезно, пять способов, которыми математика свиданий молча лжет вам, чтобы вы распознали их в своем собственном коде.

TL;DR: Выберите две даты в Toolz.dev Калькулятор разницы дат и получите точный разрыв в днях, неделях, месяцах и годах - мгновенный, бесплатный, на стороне клиента. Три ловушки, которые нужно проверять каждый раз: включительно и эксклюзивный подсчет (считана ли дата окончания?), арифметика месяца (месяцы имеют 2831 день, поэтому "1 месяц спустя " неоднозначно) и часовые пояса (дата без часового пояса - это разный момент в каждой зоне - сначала преобразуйте временные метки с помощью Конвертер времени отметки времени). Для повторяющихся интервалов, а не разовых пробелов, это работа для синтаксический анализатор, йо-


Основные характеристики

Точный подсчет дней (без наземных мин без летающего времени)

Основополагающий результат: точное количество дней между двумя календарными датами. наивный (b - a) / 86400000 вы ' найдете в тысяче кодовых баз JavaScript разрывы всякий раз, когда переход на дневной свет происходит между датами по местному времени, что дает результаты, например 89,958333 дня, которые затем округляются в любом направлении неправильно. Этот калькулятор обходит весь класс ошибок, анализируя обе даты как UTC, прежде чем он выполнит какую-либо арифметику - UTC никогда не перескакивает вперед и не отступает, поэтому в день всегда ровно 86 400 000 миллисекунд, и счет становится чистым. Разбивка по годам/месяцам/дням, тем временем, рассчитывается с помощью реальной календарной математики (заблаговременно, затем считайте оставшиеся дни), а не путем деления на средний месяц. Когда ваш код говорит 90, а калькулятор говорит 89, поверьте калькулятору и найдите границу DST в своих данных по местному времени.

несколько единиц одновременно

Тот же разрыв, выраженный как дни, недели, месяцы, и годы - одновременно. Это более полезно, чем звучит, потому что разные домены говорят разные единицы: юридические контракты говорят в месяцах, спринт планирования переговоры в неделях, счет переговоров в днях, HR переговоры в годах службы. разрыв между 15 марта и 15 сентября составляет 184 дня, 26 недель и 2 дня, или ровно 6 месяцев, и какое число вам нужно полностью зависит от того, кто и #39;s спрашивают. иметь их все в одном представлении означает, что вы перестаете делать "184 разделить на 7 - это... 26 и изменить " арифметика в вашей голове, что является именно арифметикой люди ошибаются.

Эксклюзивные итоги плюс включенные рабочие дни

Проблема с забором, сделанная видимой. Общий день-день здесь исключительный- разрыв между датами - поэтому с понедельника по пятницу читается как 4. Прямо под ним калькулятор считает рабочие дни (С понедельника по пятницу, без выходных) с использованием инклюзивного соглашения, которое использует Excel's NETWORKDAYS, а также сообщает вам, сколько выходных дней он выпал, поэтому тот же период с понедельника по пятницу читается как 5 рабочих дней. просмотр эксклюзивного общего количества и инклюзивного количества рабочих дней в одном представлении является небольшим ежедневным напоминанием о том, что & quot; сколько дней и квот; имеет два правильных ответа в зависимости от того, считаете ли вы обе конечные точки. Мой возврат 9 долларов произошел потому, что мой код ответил на эксклюзивный вопрос, в то время как моя страница цен задавала инклюзивный вопрос, а инструмент, который показывает оба соглашения одновременно, является инструментом, который останавливает выбор одного из них случайно.

Работает в течение месяцев, високосных лет и веков

В феврале 28 дней, за исключением 29; 2024 год был високосным, 2100 вон и №39; т.е., несмотря на то, что он делится на 4 (правило григорианского века, которое ловит всех). Калькулятор получает все это право, потому что использует реальные правила календаря, а не "год - это 365,25 дней и котировок; приближения. Если вам и #39; когда-либо требовался подсчет дней для диапазона дат, охватывающего февраль високосного года - начисление процентов, окна SLA, расчеты возраста около дня рождения 29 февраля - вы знаете, что эти крайние случаи - это именно то место, где вручную провалена математика.

Мгновенный, без регистрации, нет загрузки

Даты входят, ответ выходит, полностью клиент-сторона. ничего не передается и не хранится. для большинства дат математика это удобство, а не безопасность - но не всегда. Даты трудоустройства, медицинские сроки, сроки судебных разбирательств: пары дат могут быть тихо чувствительны, и там's нет причин, по которым калькулятор должен когда-либо видеть их на стороне сервера. инструмент быстро загружается и работает в автономном режиме после загрузки, что также делает его тем, чего вы достигаете в середине встречи, когда кто-то спрашивает "wait, как долго этот билет был открыт?"


Как использовать калькулятор разницы в дате

Шаг 1: Введите дату начала

откройте Калькулятор разницы дат и установить первую дату. использовать сборщик, ввести его напрямую или нажать кнопку Сегодня, чтобы привязать его к текущей дате. There's необязательное поле времени (HH:mm), если вам нужны итоговые суммы до часа или минуты, а не до полуночи-полночи. если ваши исходные данные являются меткой времени Unix или строкой ISO 8601 с временным компонентом, сначала определите его до календарной даты - и будьте внимательны к часовому поясу, потому что 1751846400 7 июля в Токио и еще 6 июля в Лос-Анджелесе. выше Конвертер времени отметки времени обрабатывает этот перевод.

Шаг 2: Введите дату окончания

Установите вторую дату.Заказ делает 't нужно беспокоить вас - разница есть величина, и там 's кнопку подкачки, если вы хотите перевернуть старт и конец в любом случае.Здесь стоит преднамеренной мысли: является ли ваша дата окончания последний день из период или первый день после ЭТО? Подписка, которая «заканчивается 31 декабря», и «обновляет 1 января» один и тот же период с разными датами окончания, и это самый распространенный источник однодневных разногласий между двумя людьми, вычисляющими «тот же».

Шаг 3: Прочтите разницу в необходимом устройстве

Результат показывает разрыв между единицами. Возьмите ту, в которой обозначена ваша проблема, и сопротивляйтесь преобразованию между ними вручную после этого - "6 месяцев & quot; и & quot;182,5 дней & quot; не взаимозаменяемы, потому что месяцы & # 39;t фиксированная длина. Если ответ войдет в контракт, счет-фактуру или SLA, укажите единицу а Конвенция подсчета ("30 календарных дней, без даты начала"), чтобы следующий человек не вводил только что разрешённую вами неоднозначность.

Шаг 4: Проверка здравомыслия по вашему коду

Если вы используете калькулятор для отладки приложения, сравните его ответ с тем, что ваш код производит для той же пары дат. Несоответствие ровно один день означает проблему с ограждением или границами часового пояса. Несоответствие дробного дня означает миллисекундное деление при изменении DST. Несоответствие в два или три дня в конце месяца означает переполнение арифметики в месяц. выше численность ошибка - это диагноз - подробнее о каждом из них ниже.


Техническое глубокое погружение: почему Date Math пошло не так

Арифметика даты выглядит как вычитание и на самом деле представляет собой кучу правил календаря, политику часового пояса и неоднозначности дефиниции. Пять режимов сбоя учитывают почти все ошибки, которые я отправил или пересмотрел.

1. Проблема с забором (незаметно). Между 1 и 15-й день есть 14 интервалов, но 15 дней, если считать оба конца. Ни один номер не является "разница", пока вы не укажете соглашение. В ночах отеля, процентах по кредиту и срокам аренды используются эксклюзивные рецепты, длительность событий и «дни покрытия» обычно используют включительно. Паттерн ошибки: одна часть системы использует каждую. Запишите условность.

2. Месяцы не единицы. "Один месяц после 31 января" не имеет очевидного ответа - 31 февраля не существует 't существует. JavaScript's наследие Date Обрабатывает это путем переполнения: new Date(2026, 0, 31) Плюс один месяц попадает 3 марта (28 февраля + 3 дня переполнения). strtotime('+1 month') делает то же самое. Большинство людей и большинство биллинговых систем хотят зажим вместо этого: 31 января + 1 месяц = 28 февраля (или 29). библиотеки отличаются - date-fns и Carbon clamp по умолчанию в своих помощниках-добавителях месяца, сырые Date переполняется - и новое Временный API Делает поведение явным вариантом, который является правильным дизайном. Если ваше приложение делает что-то ежемесячно с датами привязки после 28-го числа, это ошибка, которая у вас есть, независимо от того, нашли вы его еще или нет.

3. В день не всегда 24 часа. В любом часовом поясе, где наблюдается летнее время, один день в году длится 23 часа, а другой — 25. код, который вычисляет дневные различия как milliseconds / 86_400_000 производит нецелое число всякий раз, когда диапазон пересекает переход, а последующий Math.round против Math.floor выбор решает, будете ли вы 'отключиться на единицу. Надежный подход заключается в том, чтобы выполнять дневную арифметику в календарные даты, а не в моменты, или нормализовать все до UTC, в котором нет летнего времени, перед делением.

4. Дата без часового пояса — это не момент времени. "2026-07-06" - 24-часовой дальность Это начинается и заканчивается в разные моменты в каждом часовом поясе. Самая противная версия этой ошибки в JavaScript: new Date("2026-07-06") анализирует как UTC Полночь Согласно спецификации ECMAScript, поэтому в любом часовом поясе к западу от Гринвича он отображается как 5 июля. Я потерял большую часть дня из-за этого в панели React, где датируются постгре DATE колонка отображается на день раньше для пользователей из США - колонка была в порядке, API был в порядке, конструктор был ошибкой. если вы возьмете одну строку из этой статьи: никогда не кормите голым YYYY-MM-DD вести new Date() Когда важна интерпретация местного времени.

5. ISO 8601 — это ответ на другой вопрос. ИСО 8601 (2026-07-06, Big-Endian, с нулевым набивкой) решает дату представитель- это's однозначно где 07/06/2026 означает 6 июля в Огайо и 7 июня в Оксфорде, и это сортирует лексикографически. Используйте его в каждом журнале, API и имени файла. Но это ничего не делает для даты арифметический; в идеально отформатированном паре дат ISO все еще есть все четыре проблемы, указанные выше. Формат дисциплины и математическая дисциплина — это отдельные дисциплины.

Метаурок: используйте реальную библиотеку календаря (date-fns, Luxon, Carbon или Temporal, когда ваши цели поддерживают ее), выполняйте арифметику в календарном пространстве, а не в миллисекундном пространстве, и проверяйте крайние случаи - конец месяца, високосные дни, летнее время. выходные - против независимого источника, такого как калькулятор, йо- Независимая проверка — это целая точка инструментария; подробнее об этой философии в Руководство по конвертеру времени, йо-


Общие варианты использования

Сроки выставления счетов и продолжительность пробной версии

Системы подписки живут и умирают на дату математика. для пропорционального распределения требуется точное количество дней в течение расчетного периода; испытаниям нужна однозначная дата окончания; годовые планы должны сохраниться 29 февраля. При построении потоков платежей я теперь вычисляю границу каждого периода дважды - один раз в коде, один раз в калькуляторе - перед написанием теста. Он выявил реальные ошибки как минимум четыре раза, всегда на границе конца месяца или летнего времени, и всегда такой, который в противном случае всплыл бы как запутанное письмо клиента. Если деньги умножаются по счетчику дней в любой точке вашей системы, проверьте счет дня независимо.

Сроки проекта и планирование спринта

"Сколько рабочих недель между настоящим моментом и датой выпуска?" появляется на каждой планерке, и ответ, который люди вычисляют в своей голове, надежно отклоняется на одну или две - люди плохо умеют считать через границы месяца. Получение истинного календарного разрыва в днях и неделях занимает пять секунд и закладывает основу разговора. оттуда вы вычитаете праздники и честно буферизуете, а не начинаете с числа, которое уже было оптимистично на неделю.

Контракт, уведомление и расчеты сроков

Юридические и кадровые даты сопровождаются неумолимыми соглашениями: 90-дневный период уведомления, 30-дневное окно лечения, причитающаяся подача "в течение 21 дня обслуживания." это именно эксклюзивные минные поля "включительно против" и стоимость опоздания на один день категорически хуже, чем стоимость раннего опоздания на один день. Вычислите интервал, затем подтвердите, какую конечную точку соглашения использует документ. (И для всего, что действительно имеет значение, юрист превосходит калькулятор - инструмент сообщает вам счет, а не юрисдикцию и правила подсчета #39;с.)

Расчеты возраста и срока пребывания в должности

Возраст, годы службы, срок службы аккаунта - все & quot;разница в годах и месяцах & quot; проблемы с зажимающим правилом, скрывающимся внутри (у кого-то, родившегося 29 февраля, законный день рождения - 28 февраля или 1 марта в зависимости от юрисдикции, что является реальностью, которую инженерам пришлось кодировать).Для быстрого ответа - сколько лет этому аккаунту, сколько дней с момента последнего развертывания, сколько дней с момента инцидента - калькулятор дает точную цифру, не загружая REPL.

Проверка здравомыслия данных

Когда в отчете говорится, что средний разрыв в заказе на доставку составляет 47 дней, а в вашем кишечнике указано две недели, возьмите реальный ряд и проверьте две даты вручную. Половина времени «жужжание» — это смена часового пояса или сменный месяц/день при анализе вверх по течению. Спот-проверка трех или четырех строк на доверенный калькулятор — это самый быстрый способ решить, не доверять ли трубопроводу или вашему кишечнику. Для того, чтобы скрыть то, что изменилось между двумя экспортированными отчетами, Инструмент текстового дифференциала Хорошо сочетается с этим рабочим процессом.


Счетные соглашения по сравнению

конвенция Пн → Пт равные используемый для остерегаться
Эксклюзив (пробел) 4 дня Ночи в отеле, начисление процентов, возраст в днях Чувствует себя «одним короткометражным» для нетехнических читателей
Включительно (продолжительность) 5 дней Лекарственные дни, длительность событий, «дни покрытия»; OFF-BY-ONE при смешанных с эксклюзивными системами
рабочие дни 4 или 5 минус праздников SLA, сметы доставки, юридические сроки Календари на праздничные дни различаются по стране и даже по контракту
Точные 24-часовые периоды Зависит от раз Аренда, парковка, API ставки DST делает один местный день 23 часа и еще 25 часов
Календарь месяцев/год "1 месяц спустя" Циклы выставления счетов, контракты, аренда Длительность месяца варьируется; зажим против переполнения в конце месяца

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


часто задаваемые вопросы

Что такое калькулятор разницы в дате?

Калькулятор разницы дат вычисляет точный разрыв между двумя календарными датами, выраженный в днях, неделях, месяцах и годах. В отличие от мысленной математики или наивного вычитания миллисекунды, он применяет реальные календарные правила - переменную продолжительность месяца, високосные годы, правила столетия - поэтому результат верен в крайних случаях, таких как февраль, в високосный год или диапазоны, охватывающие переход на летнее время.

Как рассчитать количество дней между двумя датами?

Введите обе даты в Калькулятор разницы дат и читать счет дня. делая это вручную, считайте оставшиеся дни в начальном месяце, добавляйте полные месяцы между, затем добавляйте дни в конечный месяц - и заранее решайте, считать ли дату окончания сама. Это последнее решение, включительно против исключительного подсчета, - это то, где большинство ручных вычислений идут не так, как надо на единицу.

Включена ли дата окончания при подсчете дней между датами?

По соглашению, нет - стандартный & quot;разница& quot; является эксклюзивным, считая интервалы между датами, поэтому с понедельника по пятницу составляет 4 дня. Но многие реальные контексты (графики приема лекарств, периоды покрытия, продолжительность мероприятий) учитываются включительно, что делает его 5. Ни то, ни другое не является неправильным; они отвечают на разные вопросы. Всегда укажите, какое соглашение вы и #39; используйте, когда номер входит в контракт или счет.

Почему моя математика по дате javascript дает другой ответ?

Три обычных подозреваемых: new Date("YYYY-MM-DD") Сетчатые строки сводятся к полуночи, смещая дату на день в западных часовых поясах, деля миллисекундные перерывы на 86 400 000 перерывов в переходах с 24-ти дневными периодами, когда день не 24 часа, и добавление месяцев с переполнением даты устаревшего объекта (31 января + 1 месяц = 3 марта). Используйте библиотеку с учетом календаря, такую как Date-FN, Luxon или API-интерфейс, а не сырую арифметику.

Как рассчитываются месяцы, когда они имеют разную длину?

Разница в месяцах рассчитывается в календаре, а не путем деления дней на среднее значение: с 15 марта по 15 сентября составляет ровно 6 месяцев, хотя 184 дня 's. Неоднозначность проявляется в датах привязки после 28-го числа - через месяц после 31 января обычно фиксируется до 28 или 29 февраля. Системы выставления счетов с хорошим поведением зажимаются; наивный код переполняется в начале марта, что является настоящей ошибкой, на которую стоит обратить внимание.

Влияют ли високосы на разницу в дате?

Да - любой диапазон, охватывающий 29 февраля в високосный год (например, 2024 или 2028), содержит на один день больше, чем тот же диапазон в обычном году, и правильные калькуляторы учитывают его автоматически. Тонкое правило: годы, делящиеся на 100, не являются високосными годами, если они также не делятся на 400, поэтому 2000 год был високосным годом, но 2100 вон и #39; т.е. Ручная прокатка " деление на 4" проверки не выполняются точно в те годы.

Как часовые пояса влияют на расчетные дни между датами?

Голая дата - это разное 24-часовое окно в каждом часовом поясе, поэтому две системы в разных зонах могут законно не соглашаться относительно того, что такое & quot;today& quot; is - и отметка времени около полуночи может приходиться на разные календарные даты в зависимости от зоны, используемой для ее интерпретации. Для чистых различий в датах календаря применяются часовые пояса don & # 39;t; для дат, полученных с помощью отметки времени, сначала преобразуйте обе отметки времени в одну и ту же зону, используя такой инструмент, как Конвертер времени отметки времени, йо-

Является ли калькулятор разницы дат Toolz.dev бесплатным и частным?

Да по обоим пунктам. Он полностью работает в вашем браузере без регистрации - даты, которые вы вводите, никогда нигде не загружаются, не регистрируются и не сохраняются. Это имеет большее значение, чем кажется, поскольку пары дат могут кодировать конфиденциальные факты, такие как периоды трудоустройства, медицинские сроки или юридические сроки, и там & # 39;s нет технической причины, по которой калькулятору необходимо видеть их на стороне сервера.

Frequently Asked Questions

A date difference calculator computes the exact gap between two calendar dates, expressed in days, weeks, months, and years. Unlike mental math or naive millisecond subtraction, it applies real calendar rules — variable month lengths, leap years, century rules — so the result is correct across edge cases like February in a leap year or ranges spanning daylight saving transitions.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!