JavaScript:Získejte počet dní mezi daty

Úvod

Často se přistihneme, že počítáme počet dní od a komu datum. Ať už jde o výpočet, kdy má někdo vrátit knihu, kdy by mělo být obnoveno předplatné, kolik dní uplynulo od upozornění nebo kdy se blíží nová událost.

V tomto tutoriálu se podíváme na to, jak získat počet dní mezi daty v JavaScriptu .

Datum Objekt v JavaScriptu

JavaScript Date je Number tiků (nebo milisekund), které uplynuly od začátku epochy UNIX (půlnoc 1. ledna 1970, UTC).

I když v jádru je Date objekt je definován pomocí UTC , všechny jeho metody načítají časy a data v místním časovém pásmu:

Date(); // Constructor for a new Date object
Date.now(); // Number of miiliseconds elaspsed since January 1, 1970 00:00:00 UTC

Nyní, když jsme obeznámeni se syntaxí, podívejme se, jak získat počet dní mezi dvěma daty pomocí Date objekt v JavaScriptu.

Počet dní mezi daty

Abychom získali počet dní mezi dvěma daty, vytvoříme jednoduchou funkci getNumberOfDays() , který přijímá dva Date objekty:

function getNumberOfDays(start, end) {
    const date1 = new Date(start);
    const date2 = new Date(end);

    // One day in milliseconds
    const oneDay = 1000 * 60 * 60 * 24;

    // Calculating the time difference between two dates
    const diffInTime = date2.getTime() - date1.getTime();

    // Calculating the no. of days between two dates
    const diffInDays = Math.round(diffInTime / oneDay);

    return diffInDays;
}

console.log(getNumberOfDays("2/1/2021", "3/1/2021"));

Výsledkem tohoto kódu je:

28

Funkce přijímá dva String s, které představují data. Nejprve vytvoříme Date objektů z těchto řetězců, po kterých vypočítáme počet milisekund za den. getTime() funkce vrací čas v milisekundách , mezi začátkem epochy Unixu a aktuálním časem. Pokud tedy odečteme start datum od end datum, získáme počet milisekund mezi nimi.

Tento počet milisekund pak můžeme převést na dny tak, že jej vydělíme počtem milisekund za den, čímž získáme počet dní mezi dvěma daty.

Poznámka: Tento přístup zahrnuje start datum, ale nezahrnuje end datum.

Získejte počet dní mezi daty v JavaScriptu pomocí js-joda

Vývojáři obeznámení s Javou budou pravděpodobně obeznámeni s široce používanou knihovnou Joda-Time, která byla extrémně populární před přepracováním rozhraní Date/Time API v Javě 8.

Vliv Joda-Time inspiroval vytvoření js-joda – obecné knihovny data/času pro JavaScript, založené na kalendářním systému ISO.

Další výhodou je, že je extrémně lehký a opravdu rychlý a ve srovnání s jinými knihovnami, jako je Moment.js nebo date-utils , poskytuje vlastní implementaci objektů data/času, místo toho, aby se spoléhal na Date třídy z nativní implementace JavaScriptu.

Pojďme importovat knihovnu pomocí vanilkového JavaScriptu:

<script
    src="https://cdnjs.cloudflare.com/ajax/libs/js-joda/1.11.0/js-joda.min.js" 
</script>

Nebo, pokud používáte NPM:

Zdarma e-kniha:Git Essentials

Prohlédněte si našeho praktického průvodce učením Git s osvědčenými postupy, průmyslově uznávanými standardy a přiloženým cheat sheetem. Přestaňte používat příkazy Google Git a skutečně se naučte to!

$ npm install js-joda

Nyní můžeme použít js-joda API. Přepišme předchozí funkci tak, aby používala LocalDate třídy, s laskavým svolením js-joda :

const JSJoda = require('js-joda');
const LocalDate = JSJoda.LocalDate;

function getNumberOfDays(start, end) {
    const start_date = new LocalDate.parse(start);
    const end_date = new LocalDate.parse(end);

    return JSJoda.ChronoUnit.DAYS.between(start_date, end_date);
}

console.log(getNumberOfDays("2021-02-01", "2021-03-01"));

To má také za následek:

28

Poznámka: Tento přístup je také vyloučen z end_date .

Závěr

V tomto tutoriálu jsme se podívali na to, jak získat počet dní mezi daty v JavaScriptu. Jiný než vestavěný přístup, spoléhat se na Date třídy, také jsme prozkoumali js-joda knihovna, která byla inspirována Java-řízeným Joda-Time knihovny, za mnohem stručnější přístup k řešení tohoto problému.