# Calculate the number of days between 2 dates in JavaScript

> Learn how to calculate the number of days or nights between two dates in JavaScript by adding a day at a time in a loop, an approach that handles DST safely.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2019-11-04 | Topics: [JavaScript](https://flaviocopes.com/tags/js/) | Canonical: https://flaviocopes.com/how-to-count-days-between-dates-javascript/

In particular, I wanted to count the number of nights that a person had to pay to rent a house and sleep in it, depending on the checkin [date](https://flaviocopes.com/javascript-dates/), and the checkout date.

I looked at different solutions, and the one that gave me the least problems, considering all the issues with dates (including DST), was this: starting from the starting date, we add one day until the date represents a date after the end date.

Here's the code:

```js
const numberOfNightsBetweenDates = (startDate, endDate) => {
  const start = new Date(startDate) //clone
  const end = new Date(endDate) //clone
  let dayCount = 0

  while (end > start) {
    dayCount++
    start.setDate(start.getDate() + 1)
  }

  return dayCount
}
```

I first clone the dates we are given, because dates are objects, and we get a _reference_ to that object. This means that using `setDate()` in the function would also affect the variable outside of this function - not something we look forward to!

That's it.

If instead you want to get the number of days between 2 dates (say, today to tomorrow is 2 days), just change `while (end > start)` to `while (end >= start)`. That would work. Or increase the `dayCount` starting point to `1`.

If you just need a quick answer without writing code, try the [date duration calculator](https://flaviocopes.com/tools/date-duration/).
