Command Palette

Search for a command to run...

Calculateur de différence de date : compter les jours entre les dates sans bogues off-by-un

Calculateur de différence de date : compter les jours entre les dates sans bogues off-by-un

T
Toolz Team
|Jul 12, 2026|19 min Lire

Fait partie de la collection Heure et date

Une fois, j'ai remboursé un client 9 $ à cause d'un poteau de clôture. Le SaaS que je construisais avait un essai de 14 jours et mon code de prorata a calculé des "jours utilisés" comme endDate - startDate en millisecondes, divisé par 86 400 000, arrondi Commencez un essai à 23 h le 1 er, convertissez à 1 h le 15, et le calcul dit 14 jours - mais le client&#39 ; son modèle mental a dit &quot ; je me suis inscrit le 1 er, ça&#39 ; son premier jour,&quot ; ce qui fait le 15 ème jour quinze L'essai a-t-il duré 14 jours ou 14 nuits ? Mon code et ma page de tarification étaient en désaccord l'un avec l'autre, et le client l'a remarqué avant moi.

C'est le truc avec le calcul de date : la soustraction est triviale et la définition C'est là que tout va mal. Comptage inclusif ou exclusif. Qu'il s'agisse d'un mois "à partir du 31 janvier 28 février, du 2 mars ou du 3 mars 2018. Qu'un "jour" soit de 24 heures lorsque l'heure d'été fait un jour de l'année 23 heures et 25 autres. Chacun d'entre eux m'a mordu au moins une fois, et j'expédie des applications Laravel et React depuis plus d'une décennie.

un Calculateur de différence de date existe pour répondre à la question avec précision afin que vous puissiez vérifier vos hypothèses - et votre code - par rapport à un résultat connu-correct Celui sur Toolz.dev calcule l'écart entre deux dates quelconques en jours, semaines, mois et années, entièrement dans votre navigateur Je l'utilise constamment : vérification des périodes de facturation, vérification des durées des contrats, règlement & devis ; combien de jours avant le lancement&quot ; débats dans Slack avec un lien au lieu d'un argument.

Ce guide explique comment l'utiliser et, plus utilement, les cinq façons de dater les mathématiques vous ment silencieusement, vous les reconnaissez donc dans votre propre code.

tl;dr : Choisissez deux dates dans le Calculateur de différence de date Toolz.dev et obtenez l'écart exact en jours, semaines, mois, et années - instant, gratuit, côté client Les trois pièges à vérifier à chaque fois : comptage inclusif vs exclusif (la date de fin est-elle comptée ?), arithmétique des mois ont 2831 jours, donc &quot ;1 mois plus tard&quot ; est ambigu), et les fuseaux horaires (une date sans fuseau horaire est un instant différent dans chaque zone - convertissez d'abord les horodatages avec le Convertisseur d'horodatage). Pour les intervalles récurrents plutôt que pour les écarts ponctuels, c'est un travail pour le analyseur.


Principales caractéristiques

Compte de jours exacts (pas de mines terrestres DST)

Le résultat fondamental : le nombre précis de jours entre deux dates de calendrier. le naïf (b - a) / 86400000 Vous et n° 39 ; trouverez dans mille bases de code JavaScript des ruptures chaque fois qu'une transition permettant d'économiser la lumière du jour se situe entre les dates en heure locale, produisant des résultats comme 89,958333 jours qui sont ensuite arrondis dans la direction dans laquelle il ne va pas. Cette calculatrice contourne toute la classe de bug en analysant les deux dates comme UTC avant de faire une arithmétique - UTC ne jaillit jamais et ne recule jamais, donc un jour il y a toujours exactement 86 400 000 millisecondes et le décompte est net. Les années/mois/jours croient que la ventilation, quant à l'avance, le calendrier est calculé, le calculateur local, dit 9 jours, le calculateur, le calculateur, dit le calculateur, le mois, le calculateur, le 9, le temps n'est pas le calculateur, le temps n'est pas le temps n'est pas le code.

Plusieurs unités à la fois

Le même écart exprimé en jours, semaines, mois, et années - simultanément C'est plus utile que cela ne semble, car différents domaines parlent des unités différentes : les contrats légaux parlent en mois, les pourparlers de planification de sprint en semaines, les pourparlers de facturation en jours, les pourparlers RH en années de service L'écart entre le 15 mars et le 15 septembre est de 184 jours, 26 semaines et 2 jours, ou exactement 6 mois, et le nombre dont vous avez besoin dépend entièrement de qui et n°39 ; se demander Avoir tous dans une vue signifie que vous arrêtez de faire le &quot ; 184 divisé par 7 est... 26 et change&quot ; l'arithmétique dans votre tête, ce qui est exactement les gens qui sont faux.

Totaux exclusifs plus jours ouvrables inclus

Le problème du poteau de clôture, rendu visible. Le nombre total de jours ici est exclusif- l'écart entre les dates - donc du lundi au vendredi se lit comme 4. Juste en dessous, la calculatrice compte jours ouvrables (du lundi au vendredi, week-end exclus) en utilisant la convention inclusive qu'Excel&#39 ; s NETWORKDAYS utilise, et il vous indique également combien de jours de week-end il a chuté, donc la même période du lundi au vendredi se lit comme 5 jours ouvrables Voir un total exclusif et un compte de jours ouvrables inclusif dans la même vue est un petit rappel quotidien que &quot ; combien de jours&quot ; a deux bonnes réponses selon que vous comptez les deux points finaux Mon remboursement de 9 $ a EU lieu parce que mon code a répondu à la question exclusive alors que ma page de tarification a posé la question inclusive - et un outil qui montre les deux conventions à la fois est un outil qui vous arrête de choisir un par accident.

Fonctionne sur des mois, des années bissextrices et des siècles

Février a 28 jours sauf quand il en a 29 ; 2024 était une année bissextile, 2100 won&#39 ; t malgré être divisible par 4 (la règle du siècle grégorien qui attrape tout le monde).La calculatrice obtient tout cela correctement car elle utilise des règles de calendrier réelles plutôt que &quot ; une année est 365,25 jours&quot ; approximations Si vous et #39 ; avez déjà EU besoin du décompte des jours pour une plage de dates s'étendant sur février dans une année bissextile - intérêts accumulés, fenêtres SLA, calculs d'âge près d'un anniversaire de 29 février - vous savez que ces cas marginaux sont précisément où les maths roulés à la main échoue.

Inscription instantanée, pas d'inscription, pas de téléchargement

Les dates entrent, la réponse sort, entièrement côté client Rien n'est transmis ou stocké Pour la plupart des mathématiques de date c'est la commodité plutôt que la sécurité - mais pas toujours Les dates d'emploi, les délais médicaux, les délais de litige : les paires de dates peuvent être discrètement sensibles, et là&#39 ; c'est pas une raison pour qu'une calculatrice les voie jamais côté serveur L'outil se charge rapidement et fonctionne hors ligne une fois chargé, ce qui en fait également la chose que vous atteignez pour la mi-réunion quand quelqu'un demande &quot ; attendez, combien de temps ce ticket est-il ouvert ?&quot ;


Comment utiliser le calculateur de différence de date

Étape 1 : Entrez la date de début

Ouvrez le Calculateur de différence de date et définissez la première date Utilisez le sélecteur, tapez-le directement ou appuyez sur le bouton Aujourd'hui pour l'enclencher à la date actuelle There&#39 ; est un champ horaire facultatif (HH : mm) si vous avez besoin des totaux jusqu'à l'heure ou la minute plutôt que minuit à minuit Si vos données sources sont un horodatage Unix ou une chaîne ISO 8601 avec une composante horaire, résolvez-le d'abord à une date calendaire - et soyez délibéré sur le fuseau horaire, car 1751846400 est le 7 juillet à Tokyo et toujours le 6 juillet à Los Angeles. le Convertisseur d'horodatage gère cette traduction.

Étape 2 : Entrez la date de fin

Définissez la deuxième date. Commander n°39 ; vous n'avez pas à vous inquiéter - une différence est une ampleur, et là&#39 ; est un bouton d'échange si vous voulez quand même lancer et terminer le début et la fin. Cela vaut une réflexion délibérée ici : votre date de fin est-elle le dernier jour de la période ou le premier jour après ça? Un abonnement qui "se termine le 31 décembre" et qui "renoue le 1 janvier" décrit la même période avec des dates de fin différentes, et c'est la source la plus courante de désaccords d'un jour entre deux personnes calculant la "même" fourchette.

Étape 3 : Lisez la différence dans l'unité dont vous avez besoin

Le résultat montre l'écart entre les unités Prenez celui dans lequel votre problème est libellé, et résistez à convertir entre eux à la main après - &quot ; 6 mois&quot ; et &quot ;182,5 jours&quot ; ne sont pas interchangeables, car les mois sont&#39 ;t une durée fixe Si la réponse sera dans un contrat, une facture, ou SLA, indiquer l'unité et La convention de comptage (30 jours civils, à l'exclusion de la date de début") afin que la personne suivante ne réintroduise pas l'ambiguïté que vous venez de résoudre.

Étape 4 : Contrôle de la santé mentale par rapport à votre code

Si vous utilisez la calculatrice pour déboguer une application, comparez sa réponse à celle que votre code produit pour la même paire de dates. Une incompatibilité d'une journée exactement signifie un problème de borne de clôture ou de limite de fuseau horaire. Une non-concordance d'un jour fractionnaire signifie une division de millisecondes sur un changement DST. Une incompatibilité de deux ou trois jours autour de la fin d'un mois signifie un débordement par mois. le importance l'erreur réside dans le diagnostic - plus sur chacun d'entre eux ci-dessous.


Plongée approfondie technique : pourquoi les mathématiques de la date tournent mal ?

L'arithmétique de date ressemble à une soustraction et est en fait une pile de règles de calendrier, de politique de fuseau horaire et d'ambiguïté de définition. Cinq modes de défaillance représentent presque tous les bogues que j'ai expédiés ou revus.

1. Le problème du poteau de clôture (off par un). Entre le jour 1 et le jour 15, il y a 14 intervalles mais 15 jours si vous comptez les deux extrémités. Aucun des deux n'est "la différence" jusqu'à ce que vous spécifiez la convention. Les nuits d'hôtel, les intérêts et les périodes de location utilisent des comptages exclusifs, des prescriptions, des durées d'événements et des "jours de couverture" généralement utilisés. Le modèle de bogue : une partie d'un système utilise chacune. Notez la convention.

2. Les mois ne sont pas une unité. &quot ; Un mois après le 31 janvier&quot ; n'a pas de réponse évidente - le 31 février n'existe pas&#39 ; n'existe pas. JavaScript&#39 ;s héritage Date Gère ce problème en débordant : new Date(2026, 0, 31) Plus un mois atterrit le 3 mars (28 février + 3 jours de débordement). strtotime('+1 month') fait de même. La plupart des humains, et la plupart des systèmes de facturation, veulent amarrage au lieu de cela : 31 janvier + 1 mois = 28 février (ou 29).Les bibliothèques diffèrent - date-fns et Carbon clamp par défaut dans leurs aides à mois, brut Date débordements - et le nouveau API temporelle Fait du comportement une option explicite, qui est la conception correcte. Si votre application fait quelque chose chaque mois avec des dates d'ancrage après le 28, c'est le bogue que vous avez, que vous l'ayez déjà trouvé ou non.

3. Une journée n'est pas toujours 24 heures. Dans n'importe quel fuseau horaire qui observe l'heure d'été, un jour par an dure 23 heures et un autre dure 25 heures. Code qui calcule les différences de jour comme milliseconds / 86_400_000 produit un non-entier chaque fois que la plage traverse une transition, et la Math.round VS Math.floor choice décide si vous&#39 ; reoff par un. L'approche robuste consiste à faire de l'arithmétique de jour aux dates du calendrier, et non aux instants - ou à tout normaliser en UTC, qui n'a pas de DST, avant de diviser.

4. Une date sans fuseau horaire n'est pas un moment. "2026-07-06" est un 24 heures sur 24 rangée Cela commence et se termine à différents instants dans chaque fuseau horaire. La version la plus méchante de ce bogue en JavaScript : new Date("2026-07-06") analyse comme UTC minuit selon la spécification ECMAScript, donc dans n'importe quel fuseau horaire à l'ouest de Greenwich, il est rendu au 5 juillet. J'ai perdu la majeure partie d'un après-midi à cause de cela dans un tableau de bord React où date d'un postgres DATE colonne affichée un jour plus tôt pour les utilisateurs américains - la colonne était bien, l'API était bien, le constructeur était le bug Si vous prenez une ligne loin de cet article : ne jamais nourrir un nu YYYY-MM-DD se mettre en colère new Date() Quand l'interprétation locale est importante.

5. L'ISO 8601 est la réponse à une autre question. ISO 8601 (2026-07-06, Big-Endian, Zero-Padded) Résout la date interprétation- it&#39 ; est sans ambiguïté où 07/06/2026 Signifie le 6 juillet dans l'Ohio et le 7 juin à Oxford, et il est trié lexicographiquement. Utilisez-le dans chaque journal, API et nom de fichier. Mais ça ne fait rien pour la date arithmétique; une paire de dates ISO parfaitement formatée a toujours les quatre problèmes ci-dessus. Formater la discipline et la discipline mathématiques sont des disciplines distinctes.

La méta-leçon : utilisez une véritable bibliothèque de calendrier (date-fns, Luxon, Carbon ou Temporal lorsque vos cibles la prennent en charge), faites de l'arithmétique dans l'espace calendaire plutôt que dans l'espace milliseconde et vérifiez les cas de bord - fins de mois, jours bissextiles, DST. week-ends - contre une source indépendante comme la calculateur. La vérification indépendante est l'intérêt de l'outillage, plus sur cette philosophie dans le Guide du convertisseur de temps.


Cas d'utilisation courants

Périodes de facturation et durées de procès

Les systèmes d'abonnement vivent et meurent en mathématiques de date. La prorogation nécessite un décompte exact des jours au cours d'une période de facturation ; les essais nécessitent une date de fin sans ambiguïté ; les plans annuels doivent survivre au 29 février. Lorsque je construis des flux de paiement, je calcule désormais chaque limite de période deux fois - une fois dans le code, une fois dans la calculatrice - avant d'écrire le test. Il a détecté de vrais bugs au moins quatre fois, toujours à la fin du mois ou à l'heure d'été, et toujours du type qui aurait autrement fait surface sous la forme d'un e-mail client confus. Si l'argent se multiplie par rapport à un décompte de jours n'importe où dans votre système, vérifiez le comptez indépendamment.

Délais de projet et planification du sprint

&quot ; Combien de semaines de travail d'ici la date de sortie ?&quot ; revient dans chaque réunion de planification, et la réponse que les gens calculent dans leur tête est fiable off par un ou deux - les humains sont mauvais pour compter au-delà des limites des mois Obtenir le véritable écart de calendrier en jours et en semaines prend cinq secondes et fonde la conversation De là, vous soustrayez les vacances et tamponnez honnêtement, plutôt que de partir d'un nombre qui était déjà optimiste d'une semaine.

Calculs des contrats, des avis et des délais

Les dates légales et RH sont accompagnées de conventions impitoyables : un délai de préavis de 90 jours, une fenêtre de guérison de 30 jours, un dépôt dû &quot ; dans les 21 jours de service.&quot ; ce sont exactement les champs de mines inclusifs contre exclusifs, et le coût d'un jour de retard est catégoriquement pire que le coût d'un jour d'avance. Calculez la durée, puis confirmez quelle convention de point final le document utilise. (Et pour tout ce qui compte vraiment, un avocat bat une calculatrice - l'outil vous indique le décompte, pas la juridiction et le numéro 39 ; règles de comptage.)

Calculs d'âge et de tenure

Âges, années de service, durées de vie des comptes - tout &quot ; différence en années et mois&quot ; problèmes avec une règle de serrage se cachant à l'intérieur (quelqu'un né le 29 février a un anniversaire légal le 28 février ou le 1er mars selon la juridiction, ce qui est une chose réelle que les ingénieurs ont dû coder).Pour une réponse rapide - quel âge a ce compte, combien de temps depuis le dernier déploiement, combien de jours depuis l'incident - la calculatrice donne le chiffre exact sans charger de REPL.

Contrôles de santé mentale

Lorsqu'un rapport indique que l'écart moyen de commande à livraison est de 47 jours et que votre intestin indique deux semaines, prenez une ligne réelle et vérifiez les deux dates à la main. La moitié du temps, le "bug" est un quart de temps ou un mois/jour échangé en amont. La vérification par points de trois ou quatre lignes contre une calculatrice de confiance est le moyen le plus rapide de décider de se méfier du pipeline ou de votre intestin. Pour regarder ce qui a changé entre deux rapports exportés, le Outil de diff de texte Se marie bien avec ce flux de travail.


Comparaison des conventions

convention Lun → Ven égal utilisé pour faire attention
Exclusif (écart) 4 jours Nuits d'hôtel, Accumulation d'intérêt, Age en jours Se sent "un court" aux lecteurs non techniques
inclus (span) 5 jours jours de médicaments, durées des événements, "jours de couverture" Off-by-one lorsqu'il est mélangé avec des systèmes exclusifs
jours ouvrables 4 ou 5 minutes de vacances SLA, estimations d'expédition, délais légaux Les calendriers de vacances diffèrent selon le pays et même par contrat
Périodes exactes de 24 heures Dépend des temps Locations, parking, fenêtres tarifaires API L'heure d'été fait un jour local 23h et un autre 25h
Mois/années civils "1 mois plus tard" Cycles de facturation, contrats, location La durée des mois varie; serrage vs. débordement à la fin du mois

Le vrai message du tableau : "Combien de temps entre ces dates" n'est pas une question. Choisissez la ligne qui correspond à votre problème, nommez-la explicitement dans votre code et votre copie, et toute la catégorie de litige disparaît. C'est la même discipline que le reste de la Boîte à outils pour les développeurs Web continue de pousser - rendez l'implicite explicite et la moitié de vos bugs s'évaporent.


FAQ

Qu'est-ce qu'un calculateur de différence de date ?

Un calculateur de différence de date calcule l'écart exact entre deux dates calendaires, exprimé en jours, semaines, mois et années Contrairement aux mathématiques mentales ou à la soustraction naïve de la milliseconde, il applique des règles calendaires réelles - durées de mois variables, années bissextiles, règles du siècle - de sorte que le résultat est correct dans tous les cas de bord comme février dans une année bissextile ou dans les plages couvrant les transitions d'heure d'été.

Comment calculer le nombre de jours entre deux dates ?

Entrez les deux dates dans le Calculateur de différence de date et lisez le décompte des jours En le faisant à la main, comptez les jours restants dans le mois de début, ajoutez les mois complets entre, puis ajoutez les jours dans le mois de fin - et décidez d'emblée s'il faut compter la date de fin elle-même Cette dernière décision, inclusif contre le décompte exclusif, est l'endroit où la plupart des calculs manuels tournent mal d'un.

La date de fin est-elle incluse lors du comptage des jours entre les dates ?

Par convention, non - le standard &quot ; difference&quot ; est exclusif, en comptant les intervalles entre les dates, donc du lundi au vendredi est de 4 jours Mais de nombreux contextes réels (horaires de médicaments, périodes de couverture, durées d'événements) comptent inclusivement, ce qui fait 5. Ni l'un ni l'autre n'est faux ; ils répondent à des questions différentes Indiquez toujours quelle convention vous et n°39 ; utilisez lorsque le numéro entre dans un contrat ou une facture.

Pourquoi mon DATE MATH en JavaScript donne-t-il une réponse différente ?

Trois suspects habituels : new Date("YYYY-MM-DD") Analyse les chaînes de dates à nu en tant que UTC minuit, en transformant la date par jour dans les fuseaux horaires de l'ouest, en divisant les différences de milliseconde par 86 400 000 coupures dans les transitions DST où un jour n'est pas de 24 heures ; et en ajoutant des mois avec la date de l'héritage déborde à la fin du mois (31 janvier + 1 mois = 3 mars). Utilisez une bibliothèque compatible avec le calendrier comme Date-FNS, Luxon ou l'API temporelle au lieu de l'arithmétique brute.

Comment compter les mois lorsqu'ils ont des durées différentes ?

Les différences de mois sont calculées sur le calendrier, et non en divisant les jours par une moyenne : du 15 mars au 15 septembre dure exactement 6 mois, même si c'est le 39 ; c'est 184 jours. L'ambiguïté apparaît avec les dates d'ancrage après le 28 - un mois après le 31 janvier est généralement fixé au 28 ou au 29 février. Les systèmes de facturation bien élevés se clampent ; le code naïf déborde début mars, ce qui est un véritable bug qui mérite d'être vérifié.

Les années bissextiles affectent-elles la différence de date ?

Oui - toute plage qui s'étend sur le 29 février dans une année bissextile (comme 2024 ou 2028) contient un jour de plus que la même plage dans une année commune, et les calculatrices correctes en tiennent compte automatiquement La règle subtile : les années divisibles par 100 ne sont pas des années bissextiles à moins qu'elles ne soient également divisibles par 400, donc 2000 était une année bissextile mais 2100 won&#39 ; t. La main-roulée &quot ; divisible par 4&quot ; les contrôles échouent exactement sur ces années.

Comment les fuseaux horaires affectent-ils le calcul des jours entre les dates ?

Une date nue est une fenêtre différente de 24 heures dans chaque fuseau horaire, donc deux systèmes dans différentes zones peuvent légitimement être en désaccord sur ce que &quot ; aujourd'hui&quot ; est - et un horodatage proche de minuit peut tomber à des dates de calendrier différentes en fonction de la zone utilisée pour l'interpréter. Pour les différences pures de dates de calendrier, les fuseaux horaires don&#39 ; ne s'appliquent pas ; pour les dates dérivées de l'horodatage, convertissez d'abord les deux horodatages dans la même zone à l'aide d'un outil comme le Convertisseur d'horodatage.

Le calculateur de différence de date Toolz.dev est-il gratuit et privé ?

Oui sur les deux points Il fonctionne entièrement dans votre navigateur sans inscription - les dates que vous entrez ne sont jamais téléchargées, enregistrées ou stockées nulle part Cela compte plus qu'il n'y paraît, puisque les paires de dates peuvent encoder des faits sensibles comme les périodes d'emploi, les délais médicaux ou les délais légaux, et là-bas et n°39 ; n'est pas une raison technique dont une calculatrice a besoin pour les voir côté serveur.

Comments

0 comments

0/2000 characters

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