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 sur arrondi. Commencez un essai à 23 heures le 1er, converti à 1 h du matin le 15, et les calculs ont indiqué 14 jours, mais le modèle mental du client a déclaré : "Je me suis inscrit le 1er, ce jour-là, ce qui fait le 15e jour. Le procès était-il de 14 jours ou 14 nuits ? Mon code et ma page de tarification n'étaient pas d'accord les uns avec les autres, 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 précisément à la question afin que vous puissiez vérifier vos hypothèses - et votre code - par rapport à un résultat correct. Celui sur Toolz.dev calcule l'écart entre deux dates, semaines, mois et années, entièrement dans votre navigateur. Je l'utilise constamment : vérification des périodes de facture, vérification des durées des contrats, règlement de "Combien de jours avant le lancement de 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 mentent silencieusement, afin que vous les reconnaissiez 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 - instantané, gratuit, côté client. Les trois pièges à vérifier à chaque fois : le comptage inclus ou exclusif (est-ce que la date de fin est comptée ?), le calcul du mois (les mois ont 28 à 31 jours, donc "1 mois plus tard" 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 trouverez dans un millier de codes de JavaScript se cassent chaque fois qu'une transition d'économie de jour se situe entre les dates de l'heure locale, produisant des résultats tels que 89,958333 jours qui sont ensuite arrondis dans la direction qui est erronée. Cette calculatrice évite toute la classe de bogues en analysant les deux dates comme UTC avant de faire un arithmétique - UTC ne se déclenche jamais ou ne recule, donc une journée, il y a toujours exactement 86 400 000 millisecondes et le décompte est propre. La ventilation des années/mois/jours, quant à elle, est calculée avec des mathématiques réelles (avances entières de mois, puis comptez les jours restants), et non en divisant par un mois moyen. Lorsque votre code indique 90 et que la calculatrice indique 89, croyez la calculatrice et allez trouver la limite DST dans vos données d'heure locale.
Plusieurs unités à la fois
Le même écart exprimé en jours, semaines, mois et années - simultanément. C'est plus utile qu'il n'y paraît, car différents domaines parlent des unités différentes : les contrats légaux parlent en mois, les discussions de planification de sprint en semaines, les discussions de facturation en jours, les discussions sur les 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 vous demande. Les avoir tous dans une vue signifie que vous arrêtez de faire le "184 divisé par 7 ... 26 et changez de" l'arithmétique dans votre tête, ce qui est exactement le fait que les personnes arithmétiques se trompent.
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, est de 4. Juste en dessous, la calculatrice compte jours ouvrables (Lundi au vendredi, week-end exclu) En utilisant la convention inclusive utilisée par Excel NetworkDays, et il vous indique également combien de jours le week-end il est tombé, donc la même période du lundi au vendredi est de 5 jours ouvrables. Voir un total exclusif et un nombre de jours ouvrables inclus dans la même vue est un petit rappel quotidien que "le nombre de jours" a deux bonnes réponses selon que vous comptez les deux terminaux. Mon remboursement de 9 $ s'est produit parce que mon code a répondu à la question exclusive, tandis que ma page de prix demandait la page de prix inclusive - et un outil qui montre les deux conventions à la fois est un outil qui vous empêche d'en choisir une par accident.
Fonctionne sur des mois, des années bissextrices et des siècles
Février a 28 jours, sauf lorsqu'il a 29 ans, 2024 était une année bissextile, 2 100 ne seront pas malgré leur 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 qu'une année est de 365,25 jours. Si vous avez déjà eu besoin du nombre de jours pour une plage de dates s'étendant sur février dans une année bissextile - intérêt accumulé, Fenêtres SLA, calculs d'âge près d'un anniversaire du 29 février - vous savez que ces cas de bord sont précisément là où les mathématiques roulées à la main échouent.
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, c'est une commodité plutôt que la sécurité, mais pas toujours. Dates d'emploi, délais médicaux, délais de contentieux : les paires de dates peuvent être discrètement sensibles, et il n'y a aucune 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 à la mi-réunion lorsque quelqu'un demande "attendre, depuis combien de temps ce ticket est-il ouvert ?" ;
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 fixez la première date. Utilisez le sélecteur, tapez-le directement ou appuyez sur le bouton Aujourd'hui pour l'accrocher à la date actuelle. Il y a un champ de temps optionnel (HH:MM) si vous avez besoin des totaux jusqu'à l'heure ou la minute plutôt que de minuit à minuit. Si vos données source sont un horodatage Unix ou une chaîne ISO 8601 avec un composant de temps, résolvez-les en premier calendrier 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. L'ordre n'a pas besoin de vous inquiéter - une différence est une ampleur, et il y a un bouton d'échange si vous voulez basculer et terminer. Cela vaut la peine d'être délibéré 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 de votre problème, et résistez à la conversion entre eux à la main par la suite - "6 mois" et "182,5 jours" ne sont pas interchangeables, car les mois ne sont pas de longueur fixe. Si la réponse va dans un contrat, une facture ou un contrat de niveau de service, indiquez 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 De l'erreur est le diagnostic - plus sur chacun d'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é. "Un mois après le 31 janvier" n'a pas de réponse évidente - le 31 février n'existe pas. L'héritage de JavaScript 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 mensuelles, RAW Date déborde - 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 êtes éteint par un. L'approche robuste consiste à faire l'arithmétique de jour sur les dates de calendrier, et non aux instants - ou pour tout normaliser en UTC, qui n'a pas d'heure d'été, 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 bonne, le constructeur était le bogue. Si vous enlevez une ligne de cet article : ne nourrissez jamais un 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 — C'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.
Le méta-leçon : utilisez une véritable bibliothèque de calendriers (Date-FNS, Luxon, Carbon ou temporelle lorsque vos cibles le prennent en charge), effectuez des calculs dans l'espace du calendrier plutôt que dans des millisecondes, et vérifiez les cas de bords, les jours de temps, les jours de interruption, les week-ends DST — par rapport à une source indépendante comme le 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 à la date des mathématiques. Le nombre de jours exacts est nécessaire au cours d'une période de facturation ; les essais nécessitent une date de fin sans ambiguïté ; les plans annuels doivent survivre le 29 février. Lorsque je construis des flux de paiement, je calcule maintenant chaque limite de période deux fois - une fois dans le code, une fois dans la calculatrice - avant d'écrire le test. Il a attrapé de vrais bugs au moins quatre fois, toujours à la fin du mois ou aux bords DST, et toujours du genre qui aurait autrement fait surface en tant qu'e-mail client confus. Si l'argent se multiplie par rapport à un nombre de jours n'importe où dans votre système, vérifiez le nombre de jours de manière indépendante.
Délais de projet et planification du sprint
"Combien de semaines de travail d'ici la date de sortie" apparaît à chaque réunion de planification, et la réponse que les gens calculent dans leur tête est de manière fiable 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. À partir de là, vous soustrayez les vacances et les tampons honnêtement, plutôt que de commencer par un nombre 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û : "dans les 21 jours de service." Ce sont exactement les champs de mines inclusifs et exclusifs, et le coût d'un jour de retard est catégoriquement pire que le coût d'être un jour plus tôt. Calculez la durée, puis confirmez la convention de point de terminaison utilisée par le document. (Et pour tout ce qui compte vraiment, un avocat bat une calculatrice - l'outil vous indique le décompte, et non les règles de comptage de la juridiction.)
Calculs d'âge et de tenure
Âges, années de service, durée de vie du compte - toutes les "différences en années et en mois" avec une règle de serrage cachée à l'intérieur (quelqu'un né le 29 février a un anniversaire légal le 28 février ou le 1 mars selon la juridiction, ce qui est un vrai ingénieur. 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 bogues 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ée en jours, semaines, mois et années. Contrairement aux mathématiques mentales ou à la soustraction naïve en millisecondes, il applique des règles de calendrier réelles - durées variables, années bissextiles, règles du siècle - le résultat est donc correct dans les cas de bord comme février dans une année bissextile ou des 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 nombre de jours. En le faisant à la main, comptez les jours restants du mois de début, ajoutez les mois complets entre les deux, puis ajoutez les jours dans le mois de fin – et décidez à l'avance de compter la date de fin elle-même. Cette dernière décision, inclusive ou exclusive, est celle où la plupart des calculs manuels ne vont pas de l'un à l'autre.
La date de fin est-elle incluse lors du comptage des jours entre les dates ?
Par convention, non - la "différence" standard est exclusive, 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énement) comptent inclusivement, ce qui en fait 5. Ni l'un ni l'autre n'est faux, ils répondent à des questions différentes Indiquez toujours la convention que vous 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, c'est exactement 6 mois, même si c'est 184 jours. L'ambiguïté apparaît avec des dates d'ancrage après le 28 – un mois après le 31 janvier est généralement fixée au 28 ou 29 février. Les systèmes de facturation bien élevés se fixent; le code naïf déborde en début de mars, un véritable bug à vérifier.
Les années bissextiles affectent-elles la différence de date ?
Oui, toute fourchette qui s'étend le 29 février au cours d'une année bissextile (comme 2024 ou 2028) contient une journée de plus que la même plage au cours d'une année commune, et les calculatrices correctes en sont la responsable. La règle subtile : les années divisibles par 100 ne sont pas des années bissextiles à moins que cela ne soit également divisible par 400, donc 2000 était une année bissextile mais 2 100 ne le seront pas. Les chèques "divisibles par 4" échouent à la main sur exactement 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, de sorte que deux systèmes dans différentes zones peuvent légitimement être en désaccord sur ce qu'est "Aujourd'hui" et un horodatage vers minuit peut tomber à différentes dates de calendrier en fonction de la zone utilisée pour l'interpréter. Pour les différences de dates pures, les fuseaux horaires ne s'appliquent pas aux dates dérivées de l'horodatage, convertissez d'abord les deux horodatages dans la même zone en utilisant 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 s'exécute entièrement dans votre navigateur sans inscription. Les dates que vous entrez ne sont jamais téléchargées, enregistrées ou stockées n'importe où. Cela compte plus qu'il n'y paraît, car les paires de dates peuvent encoder des faits sensibles tels que les périodes d'emploi, les délais médicaux ou les délais légaux, et il n'y a aucune raison technique pour laquelle une calculatrice a besoin de les voir côté serveur.

