Command Palette

Search for a command to run...

Datumverschilcalculator: tel dagen tussen datums zonder bugs

Datumverschilcalculator: tel dagen tussen datums zonder bugs

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

Onderdeel van de collectie Tijd & datum

Ik heb een klant $ 9 teruggestort vanwege een hekpost. De SaaS die ik aan het bouwen was, had een proefperiode van 14 dagen en mijn prorationcode berekende "dagen gebruikt" endDate - startDate in milliseconden, gedeeld door 86.400.000, afgerond Start een proef om 23.00 uur op de 1e, converteer om 01.00 uur op de 15e, en de wiskunde zei 14 dagen - maar het mentale model van de klant ' zei & quot; Ik heb me aangemeld op de 1e, dat' de eerste dag, & quot; wat de 15e dag vijftien maakt. Was de proef 14 dagen of 14 nachten? Mijn code en mijn prijspagina waren het niet met elkaar eens, en de klant merkte het eerder op.

Dat is het ding over datumberekening: de aftrekking is triviaal en de bepaling is waar alles misgaat. inclusief of exclusief tellen. Of het nu een maand is, vanaf 31 januari, 28 februari, 2 maart of 3 maart. Of een "dag" 24 uur is wanneer de zomertijd een dag van het jaar 23 uur maakt en nog eens 25. Elk van deze heeft me minstens één keer gebeten en ik heb Laravel en React-applicaties al meer dan tien jaar verzonden.

a Datumverschil rekenmachine bestaat om de vraag precies te beantwoorden, zodat u uw aannames - en uw code - kunt controleren aan de hand van een bekend correct resultaat Die op Toolz.dev berekent de kloof tussen twee data in dagen, weken, maanden en jaren, volledig in uw browser Ik gebruik het voortdurend: facturatieperioden verifiëren, contractduur controleren, afrekenen & quot; hoeveel dagen tot lancering" debatteert in Slack met een link in plaats van een argument.

Deze gids behandelt hoe je het moet gebruiken, en - nuttiger - de vijf manieren waarop date-wiskunde stil tegen je liegt, zodat je ze in je eigen code herkent.

tl;dr: Kies twee data in de Toolz.dev datum verschil rekenmachine en krijg de exacte kloof in dagen, weken, maanden en jaren - direct, gratis, client-side De drie vallen die je elke keer moet controleren: inclusief versus exclusief tellen (wordt de einddatum geteld?), maandrekenen (maanden hebben 28-31 dagen, dus " 1 maand later" is dubbelzinnig) en tijdzones (een datum zonder tijdzone is een ander moment in elke zone - converteer tijdstempels eerst met de tijdstempel converter). Voor terugkerende intervallen in plaats van eenmalige hiaten, is dat een taak voor de croonparer.


Belangrijkste kenmerken

Exacte dagtellingen (geen DST-landmijnen)

De basisoutput: het precieze aantal dagen tussen twee kalenderdatums. de naïeve (b - a) / 86400000 u ' vindt in duizend JavaScript-codebases breekt wanneer er een daglichtbesparende overgang plaatsvindt tussen de data in de lokale tijd, wat resultaten oplevert van 89,958333 dagen die vervolgens worden afgerond in welke richting dan ook. Deze rekenmachine omzeilt de hele klasse van bugs door beide data te parseren als UTC voordat er enige rekenkunde wordt uitgevoerd - UTC springt nooit naar voren of valt terug, dus een dag is er altijd precies 86.400.000 milliseconden en de telling komt duidelijk uit. De uitsplitsing van jaren/maanden/dagen wordt ondertussen berekend met echte kalenderwiskunde (vooraf hele maanden, tel dan de resterende code) zegt niet de rekenmachine.

Meerdere eenheden tegelijk

Dezelfde kloof uitgedrukt als dagen, weken, maanden, en jaren - tegelijkertijd Dit is nuttiger dan het klinkt, omdat verschillende domeinen verschillende eenheden spreken: juridische contracten praten in maanden, sprintplanningsgesprekken in weken, factureringsgesprekken in dagen, HR-gesprekken in dienstjaren De kloof tussen 15 maart en 15 september is 184 dagen, 26 weken en 2 dagen, of precies 6 maanden, en welk aantal je nodig hebt hangt volledig af van wie's vragen. Als je ze allemaal in één visie hebt, betekent dit dat je stopt met het doen van het "184 gedeeld door 7 is... 26 en change" rekenen in je hoofd, wat precies het rekenkundige is dat mensen verkeerd krijgen.

Exclusieve totalen plus inclusieve werkdagen

Het probleem van de omheining, zichtbaar gemaakt. De totale dagtelling hier is exclusief- het gat tussen de data - dus maandag tot en met vrijdag luidt als 4. Direct daaronder telt de rekenmachine werkdagen (Maandag tot vrijdag, weekends uitgesloten) met behulp van de inclusieve conventie die Excel's NETWORKDAYS gebruikt, en het vertelt je ook hoeveel weekenddagen het is gedaald, dus dezelfde periode van maandag tot en met vrijdag luidt als 5 werkdagen. Het zien van een exclusief totaal en een inclusieve telling van de werkdag in dezelfde weergave is een kleine dagelijkse herinnering dat & quot; hoeveel dagen" heeft twee juiste antwoorden, afhankelijk van of je beide eindpunten telt. Mijn terugbetaling van $ 9 gebeurde omdat mijn code de exclusieve vraag beantwoordde terwijl mijn prijspagina de inclusieve vraag stelde - en een tool die beide conventies tegelijk laat zien, is een hulpmiddel dat je ervan weerhoudt er per ongeluk een te kiezen.

Werkt doorheen maanden, schrikkeljaren en eeuwen

Februari heeft 28 dagen behalve wanneer het er 29 heeft; 2024 was een schrikkeljaar, 2100 won' ondanks dat het deelbaar is door 4 (de Gregoriaanse eeuwregel die iedereen vangt). De rekenmachine heeft dit allemaal goed omdat hij echte kalenderregels gebruikt in plaats van & quot; een jaar is 365,25 dagen" benaderingen. Als u ' ooit de dagtelling nodig heeft gehad voor een datumbereik van februari in een schrikkeljaar - renteopbouw, SLA-vensters, leeftijdsberekeningen rond een verjaardag van 29 februari - je weet dat deze randgevallen precies waar handgerolde wiskunde faalt.

Direct, geen aanmelding, geen upload

Data gaan naar binnen, antwoord komt naar buiten, volledig client-side Niets wordt verzonden of opgeslagen Voor de meeste datum wiskunde is dit gemak in plaats van veiligheid - maar niet altijd Werkdata, medische tijdlijnen, deadlines voor rechtszaken: datum paren kunnen rustig gevoelig zijn, en there' is geen reden waarom een rekenmachine ze ooit server-side zou moeten zien De tool laadt snel en werkt offline eenmaal geladen, wat het ook het ding maakt dat je bereikt voor de mid-meeting wanneer iemand vraagt & quot; wacht, hoe lang is dat ticket open?"


Hoe de datumverschilcalculator te gebruiken

Stap 1: Voer de startdatum in

Open de Datumverschil rekenmachine en stel de eerste datum in Gebruik de picker, typ deze direct of druk op de knop Vandaag om deze naar de huidige datum te klikken. There' is een optioneel tijdveld (HH: mm) als u de totalen tot op het uur of de minuut nodig heeft in plaats van van middernacht tot middernacht Als uw brongegevens een Unix-tijdstempel of een ISO 8601-tekenreeks met een tijdcomponent zijn, breng deze dan eerst op een kalenderdatum - en wees bewust van de tijdzone, want 1751846400 Is 7 juli in Tokio en nog steeds 6 juli in Los Angeles. de tijdstempel converter verzorgt die vertaling.

Stap 2: Voer de einddatum in

Stel de tweede datum in Bestel doet ' u hoeft zich geen zorgen te maken - een verschil is een magnitude, en there' is een swapknop als u toch begin en einde wilt omdraaien.Waarbij een weloverwogen gedachte waard: is uw einddatum de laatste dag over de periode of de eerste dag nadat het? Een abonnement dat "eindigt op 31 december" en een abonnement dat "renews 1 januari" dezelfde periode beschrijft met verschillende einddatums, en dit is de meest voorkomende bron van eendaagse meningsverschillen tussen twee mensen die de "dezelfde" bereik berekenen.

Stap 3: Lees het verschil in de unit die u nodig hebt

Het resultaat toont de kloof tussen eenheden Neem degene waarin uw probleem wordt uitgedrukt, en verzet u tegen het achteraf met de hand converteren tussen hen - & quot;6 months" en & quot;182.5 days" zijn niet uitwisselbaar, omdat maanden aren't een vaste lengte hebben Als het antwoord in een contract, factuur of SLA wordt opgenomen, vermeld dan de eenheid en De telconventie (30 kalenderdagen, exclusief de startdatum") Dus de volgende persoon introduceert de dubbelzinnigheid die je zojuist hebt opgelost niet opnieuw.

Stap 4: Sanity-Check tegen uw code

Als u de rekenmachine gebruikt om een applicatie te debuggen, vergelijkt u het antwoord met wat uw code voor hetzelfde paar datums oplevert. Een mismatch van precies één dag betekent een probleem met een hekpost of een tijdzone. Een mismatch van een fractionele dag betekent millisecondenverdeling over een DST-wijziging. Een mismatch van twee of drie dagen rond het einde van een maand betekent maand- rekenkundige overloop. de op de juiste maat van de fout is de diagnose - meer over elk van deze hieronder.


Technische diepe duik: waarom date wiskunde fout gaat

Datum rekenen ziet eruit als aftrekken en is eigenlijk een stapel kalenderregels, tijdzonepolitiek en definitieve definitie. Vijf faalmodi zijn goed voor bijna elke bug die ik heb verzonden of beoordeeld.

1. Het probleem van de omheining (af-voor-een). Tussen dag 1 en dag 15 zijn er 14 intervallen maar 15 dagen als je beide uiteinden telt. Geen van beide nummers is "het verschil" totdat u de conventie opgeeft. Hotelavonden, rente en huurperiodes gebruiken exclusieve telling; recepten, duur van het evenement en "dagen van dekking" gebruiken meestal inclusief. Het bugpatroon: een deel van een systeem gebruikt elk. Schrijf de conventie op.

2. Maanden zijn geen eenheid. "Een maand na 31 januari" heeft geen duidelijk antwoord - 31 februari doet 't bestaan. JavaScript's erfenis Date Behandelt dit door overlopen: new Date(2026, 0, 31) Plus een maand landt op 3 maart (28 februari + 3 overloopdagen). strtotime('+1 month') doet hetzelfde. De meeste mensen, en de meeste factureringssystemen, willen spannen in plaats daarvan: 31 januari + 1 maand = 28 februari (of 29) Bibliotheken verschillen - datum-fns en Carbon klem standaard in hun maand-toevoeghelpers, raw Date overflows - en het nieuwe tijdelijke API Maakt het gedrag een expliciete optie, wat het juiste ontwerp is. Als je app maandelijks iets doet met ankerdatums na de 28e, is dit de bug die je hebt, of je het nu al hebt gevonden of niet.

3. Een dag is niet altijd 24 uur. In elke tijdzone die zomertijd in acht neemt, duurt één dag per jaar 23 uur en een andere 25. code die dagverschillen berekent als milliseconds / 86_400_000 produceert een niet-geheel getal wanneer het bereik een overgang overschrijdt, en het daaropvolgende Math.round versus Amerikaans wagen Math.floor keuze bepaalt of u' af zijn door een De robuuste aanpak is om dagrekenen te doen op kalenderdata, niet op momenten - of om alles te normaliseren naar UTC, dat geen zomertijd heeft, voordat u deelt.

4. Een date zonder tijdzone is geen moment in de tijd. "2026-07-06" is een 24-uursbreed fornuis Dat begint en eindigt op verschillende momenten in elke tijdzone. De vervelendste versie van deze bug in JavaScript: new Date("2026-07-06") parsen als UTC middernacht Volgens de ecmascript-specificatie, dus in elke tijdzone ten westen van Greenwich wordt het weergegeven als 5 juli. Ik verloor het grootste deel van een middag hieraan in een react-dashboard waar dateert uit een postgres DATE kolom die een dag eerder werd weergegeven voor gebruikers in de VS - de kolom was prima, de API was prima, de constructor was de bug Als je één regel verwijderd bent van dit artikel: voer nooit een kale YYYY-MM-DD verbinden met new Date() Wanneer lokale tijdsinterpretatie ertoe doet.

5. ISO 8601 is het antwoord op een andere vraag. ISO 8601 (2026-07-06, big-endian, nul-gewatteerde) lost datum op protest- het' is ondubbelzinnig waar 07/06/2026 betekent 6 juli in Ohio en 7 juni in Oxford, en het sorteert lexicografisch. Gebruik het in elke log, API en bestandsnaam. Maar het doet niets voor de datum rekenkundig; Een perfect opgemaakt paar ISO-datums heeft nog steeds alle vier bovenstaande problemen. Formaatdiscipline en wiskundediscipline zijn afzonderlijke disciplines.

De meta-les: gebruik een echte kalenderbibliotheek (date-fns, Luxon, Carbon of Temporal wanneer uw doelen deze ondersteunen), rekenkunde in de kalenderruimte in plaats van milliseconderuimte, en verifieer randgevallen - maanduiteinden, schrikkeldagen, zomertijd weekenden - tegen een onafhankelijke bron zoals de rekenmachine. Onafhankelijke verificatie is het hele punt van tooling; meer over die filosofie in de Tijdstempel Converter Guide.


Veelvoorkomende gebruiksgevallen

Factureringsperioden en proefduur

Abonnementssystemen leven en sterven op datum wiskunde Proration heeft exacte dagtellingen nodig binnen een factureringsperiode; proeven hebben een ondubbelzinnige einddatum nodig; jaarplannen moeten overleven 29 februari Bij het opbouwen van betalingsstromen bereken ik nu elke periodegrens twee keer - één keer in code, één keer in de rekenmachine - voordat ik de test schrijf. Het heeft minstens vier keer echte bugs opgelopen, altijd aan het einde van de maand of aan de zomertijdrand, en altijd het soort dat anders als een verwarde e-mail van klanten naar boven zou zijn gekomen Als het geld zich vermenigvuldigt met een dagtelling waar dan ook in uw systeem, verifieer dan onafhankelijk de dagtelling.

Projectdeadlines en sprintplanning

" Hoeveel werkweken tussen nu en de releasedatum?" komt in elke planningsvergadering naar voren, en het antwoord dat mensen in hun hoofd berekenen is betrouwbaar af met een of twee - mensen zijn slecht in het tellen over maandgrenzen heen Het verkrijgen van de echte kalenderkloof in dagen en weken duurt vijf seconden en motiveert het gesprek. Van daaruit trek je vakanties af en buffer je eerlijk, in plaats van te beginnen met een getal dat al een week optimistisch was.

Contract-, opzeg- en deadlineberekeningen

Juridische en HR-data worden geleverd met meedogenloze conventies: een opzegtermijn van 90 dagen, een herstelperiode van 30 dagen, een indiening verschuldigd & quot; binnen 21 dagen dienst." Dit zijn precies de inclusieve-vs-exclusieve mijnenvelden, en de kosten om één dag te laat te zijn zijn zijn categorisch slechter dan de kosten om één dag te vroeg te zijn. Bereken de spanwijdte en bevestig vervolgens welke eindpuntconventie het document gebruikt. (En voor alles wat er echt toe doet, verslaat een advocaat een rekenmachine - de tool vertelt u de telling, niet de jurisdictie' regels voor het tellen.)

Leeftijd en tenure berekeningen

Leeftijden, dienstjaren, accountlevensduur - alles & quot; verschil in jaren en maanden" problemen met een klemregel die zich binnenin verbergt (iemand geboren op 29 februari heeft een wettelijke verjaardag van 28 februari of 1 maart, afhankelijk van het rechtsgebied, wat echt is dat ingenieurs hebben moeten coderen). Voor een snel antwoord - hoe oud is dit account, hoe lang sinds de laatste implementatie, hoeveel dagen sinds het incident - de rekenmachine geeft het exacte cijfer weer zonder een REPL te laden.

Gegevensgezondheidscontroles

Wanneer een rapport zegt dat de gemiddelde order-to-levering kloof 47 dagen is en je darmen twee weken zegt, neem dan een echte rij en controleer de twee datums met de hand. De helft van de tijd is de "bug" een tijdzoneverschuiving of een verwisselde maand/dag bij het stroomopwaarts. Het controleren van drie of vier rijen tegen een vertrouwde rekenmachine is de snelste manier om te beslissen of u de pijplijn of uw darmen wilt wantrouwen. Voor het bekijken van wat er veranderde tussen twee geëxporteerde rapporten, Tekstdiff-tool Past goed bij deze workflow.


Conventies tel vergeleken

samenkomst ma → vr gebruikt voor uitzien voor
Exclusief (GAP) 4 dagen Hotelavonden, renteopbouw, leeftijd in dagen Voelt "een korte" aan niet-technische lezers
inclusief (Spanje) 5 dagen Medicatiedagen, duur van het evenement, "Dagen van dekking" Off-by-one wanneer gemengd met exclusieve systemen
werkdagen 4 of 5 minus feestdagen SLA's, Scheepvaartramingen, wettelijke deadlines Vakantiekalenders verschillen per land en zelfs per contract
Exacte periodes van 24 uur hangt af van tijden Verhuur, Parkeren, API Rate Windows DST maakt een lokale dag 23 uur en nog eens 25 uur
Kalendermaanden/jaren "1 maand later" Factureringscycli, contracten, huur Maandlengtes variëren; klemmen versus overloop aan de maandeinde

De echte boodschap van de tabel: "Hoe lang tussen deze datums" is niet één vraag. Kies de rij die bij uw probleem past, noem het expliciet in uw code en uw kopie, en de hele categorie geschillen verdwijnt. Dit is dezelfde discipline de rest van de Webontwikkelaar Toolkit blijft pushen - maak de impliciete expliciet en de helft van je bugs verdampt.


FAQ

Wat is een datumverschilcalculator?

Een datumverschilcalculator berekent de exacte kloof tussen twee kalenderdata, uitgedrukt in dagen, weken, maanden en jaren. In tegenstelling tot mentale wiskunde of naïeve milliseconde-aftrekking past het echte kalenderregels toe - variabele maandlengtes, schrikkeljaren, eeuwregels - dus het resultaat is correct over randgevallen zoals februari in een schrikkeljaar of bereiken die zomertijdovergangen omvatten.

Hoe bereken ik het aantal dagen tussen twee data?

Voer beide datums in de Datumverschil rekenmachine en lees de dagtelling Doe het met de hand, tel de resterende dagen in de startmaand, tel de volledige maanden ertussen op, tel de dagen vervolgens bij de eindmaand op - en beslis vooraf of je de einddatum zelf meetelt Die laatste beslissing, inclusief versus exclusief tellen, is waar de meeste handmatige berekeningen met één fout gaan.

Is de einddatum opgenomen bij het tellen van dagen tussen datums?

Volgens afspraak, nee - de standaard & quot; differentie" is exclusief, het tellen van de intervallen tussen data, dus maandag tot en met vrijdag is 4 dagen Maar veel real-world contexten (medicatieschema's, dekkingsperioden, gebeurtenislengtes) tellen inclusief mee, waardoor het 5. geen van beide is fout; ze beantwoorden verschillende vragen Altijd vermelden welke conventie u & #39; gebruikt wanneer het nummer in een contract of een factuur gaat.

Waarom geeft mijn JavaScript-datumwiskunde een ander antwoord?

Drie gebruikelijke verdachten: new Date("YYYY-MM-DD") Parseert blote datumreeksen als UTC middernacht, verschuift de datum met een dag in westerse tijdzones; verdeelt de verschillen in milliseconden door 86.400.000 breekt over de DST-overgangen waarbij een dag 24 uur is; en het toevoegen van maanden met de overloop van de oude datum Object over de maand eindigt (31 jan. + 1 maand = 3). Gebruik een kalenderbewuste bibliotheek zoals Date-FNS, Luxon of de Temporal API in plaats van Raw Rekening.

Hoe worden maanden geteld als ze verschillende lengtes hebben?

Maandverschillen worden berekend op de kalender, niet door dagen te delen door een gemiddelde: 15 maart tot 15 september is precies 6 maanden, ook al is het 's 184 dagen. De dubbelzinnigheid verschijnt met ankerdata na de 28e - een maand na 31 januari wordt doorgaans vastgeklemd tot 28 of 29 februari. Goed opgevoede factureringssystemen klemmen; naïeve code loopt over naar begin maart, wat een echte bug is die de moeite waard is om op te controleren.

Hebben schrikkeljaren invloed op het datumverschil?

Ja - elk bereik dat 29 februari in een schrikkeljaar omspant (zoals 2024 of 2028) bevat één dag meer dan hetzelfde bereik in een gewoon jaar, en correcte rekenmachines houden daar automatisch rekening mee De subtiele regel: jaren deelbaar door 100 zijn geen schrikkeljaren tenzij ook deelbaar door 400, dus 2000 was een schrikkeljaar maar 2100 won' t be. Handgewalst & quot; deelbaar door 4& quot; controles mislukken op precies die jaren.

Hoe beïnvloeden tijdzones het berekenen van dagen tussen datums?

Een kale datum is een ander 24-uursvenster in elke tijdzone, dus twee systemen in verschillende zones kunnen het legitiem oneens zijn over wat & quot;today" is - en een tijdstempel tegen middernacht kan op verschillende kalenderdata vallen, afhankelijk van de zone die wordt gebruikt om het te interpreteren. Voor pure verschillen in kalenderdatum zijn tijdzones don't van toepassing; voor van tijdstempels afgeleide datums converteert u beide tijdstempels eerst naar dezelfde zone met behulp van een tool als de tijdstempel converter.

Is de rekenmachine voor het verschil in Toolz.dev date-verschil en privé?

Ja op beide punten Het draait volledig in uw browser zonder aanmelding - de data die u invoert worden nooit geüpload, gelogd of ergens opgeslagen Dat is belangrijker dan het lijkt, aangezien datumparen gevoelige feiten kunnen coderen, zoals dienstperioden, medische tijdlijnen of wettelijke deadlines, en there' is geen technische reden waarom een rekenmachine ze aan de serverzijde hoeft te zien.

Comments

0 comments

0/2000 characters

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