Monday, 29 March, 2021 UTC


Summary

Introduction

We oftentimes find ourselves counting the number of days from and to a date. Be it calculating when someone's due to return a book, when a subscription should be renewed, how many days have passed since a notification or when a new event is coming up.
In this tutorial, we'll take a look at how to get the number of days between dates in JavaScript.

The Date Object in JavaScript

A JavaScript Date is the Number of ticks (or milliseconds) that have elapsed since the beginning of the UNIX epoch (midnight on January 1, 1970, UTC).
Even though, at heart, a Date object is defined in terms of UTC, all of its methods fetch times and dates in the local time zone:
Date(); // Constructor for a new Date object
Date.now(); // Number of miiliseconds elaspsed since January 1, 1970 00:00:00 UTC
Now that we are familiar with the syntax, let's look at how to get the number of days between two dates using the Date object in JavaScript.

Number of Days Between Dates

To get the number of days between two dates, we'll make a simple function getNumberOfDays(), which accepts two Date objects:
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"));
This code results in:
28
The function accepts two Strings, which represent dates. We firstly create Date objects from these strings, after which, we calculate the number of milliseconds in a day. The getTime() function returns the time in milliseconds, between the start of the Unix epoch and current time. So, if we subtract the start date, from the end date, we'll get the number of milliseconds between them.
We can then turn this number of milliseconds, into days, by dividing it with the number of milliseconds in a day, resulting in the number of days between two dates.
Note: This approach includes the start date, but excludes the end date.

Get Number of Days Between Dates in JavaScript with js-joda

Developers familiar with Java will likely be familiar with the widely-used Joda-Time library, which was extremely popular before the Java 8 revamp of the Date/Time API.
Joda-Time's influence inspired the creation of js-joda - a general purpose date/time library for JavaScript, based on the ISO calendar system.
An added benefit is that it's extremely lightweight and really fast, and compared to other libraries such as Moment.js or date-utils, it provides its own implementation of date/time objects, instead of relying on the Date class from the native JavaScript implementation.
Let's import the library through vanilla JavaScript:
<script
    src="https://cdnjs.cloudflare.com/ajax/libs/js-joda/1.11.0/js-joda.min.js" 
</script>
Or, if you're using NPM:
$ npm install js-joda
Now, we can use the js-joda API. Let's rewrite the previous function to use the LocalDate class, courtesy of 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"));
This also results in:
28
Note: This approach is also exclusive of the end_date.

Conclusion

In this tutorial, we've taken a look at how to get the number of days between dates in JavaScript. Other than the built-in approach, relying on the Date class, we've also explored the js-joda library, which was inspired by the Java-driven Joda-Time library, for a much more succint approach to solving this problem.