JavaScript — Get Number of Days in a Month

In some situations, you need the number of days within a month. For example, when displaying statistics for each day of a month or when calculating a value with the unit “per day”.

This tutorial shows you how to retrieve the number of days in a month using JavaScript.

Node.js Series Overview

  1. String Replace All Appearances
  2. Remove All Whitespace From a String in JavaScript
  3. Generate a Random ID or String in Node.js or JavaScript
  4. Remove Extra Spaces From a String in JavaScript or Node.js
  5. Remove Numbers From a String in JavaScript or Node.js
  6. Get the Part Before a Character in a String in JavaScript or Node.js
  7. Get the Part After a Character in a String in JavaScript or Node.js
  8. How to Check if a Value is a String in JavaScript or Node.js
  9. Check If a String Includes All Strings in JavaScript/Node.js/TypeScript
  10. Check if a Value is a String in JavaScript and Node.js
  11. Limit and Truncate a String to a Given Length in JavaScript and Node.js
  12. Split a String into a List of Characters in JavaScript and Node.js
  13. How to Generage a UUID in Node.js
  14. Reverse a String in JavaScript or Node.js
  15. Split a String into a List of Lines in JavaScript or Node.js
  16. Split a String into a List of Words in JavaScript or Node.js
  17. Detect if a String is in camelCase Format in Javascript or Node.js
  18. Check If a String Is in Lowercase in JavaScript or Node.js
  19. Check If a String is in Uppercase in JavaScript or Node.js
  20. Get the Part After First Occurrence in a String in JavaScript or Node.js
  21. Get the Part Before First Occurrence in a String in JavaScript or Node.js
  22. Get the Part Before Last Occurrence in a String in JavaScript or Node.js
  23. Get the Part After Last Occurrence in a String in JavaScript or Node.js
  24. How to Count Words in a File
  25. How to Shuffle the Characters of a String in JavaScript or Node.js
  26. Append Characters or Words to a String in JavaScript or Node.js
  27. Check if a String is Empty in JavaScript or Node.js
  28. Ensure a String Ends with a Given Character in JavaScript or Node.js
  29. Left-Trim Characters Off a String in JavaScript or Node.js
  30. Right-Trim Characters Off a String in JavaScript or Node.js
  31. Lowercase the First Character of a String in JavaScript or Node.js
  32. Uppercase the First Character of a String in JavaScript or Node.js
  33. Prepend Characters or Words to a String in JavaScript or Node.js
  34. Check if a String is a Number
  35. Convert a String to Buffer
  36. Prevent Line Breaks in String Template Literals
  37. How to Implement a Custom `toString` Method
  38. What Is `Symbol.toStringTag` and How to Use It (Coming soon)

Retrieve the Number of Days in a Month With JavaScript

JavaScript dates don’t have a method to get the last day of a month. You need to manually retrieve it. A naive and valid approach could be to add days to a date until the month changes. Then you have the last day in a month representing the number of days.

Another option is to use a trick in JavaScript related to dates. This approach is less verbose but needs more understanding of “why” this is working. The solution is to use day 0 of the “next” month which JavaScript translates to the last day of the current month.

Here’s a sample utility function daysInMonth retrieving the number of days within a month for a given date:

/**
 * Returns the number of days within the month of the given `date`.
 *
 * @returns {Number}
 */
export function daysInMonth (date) {  
  if (! date instanceof Date) {
    throw new Error('The [date] argument passed to "daysInMonth" must be a Date instance.')
  }

  const year = date.getFullYear()
  const month = date.getMonth() + 1

  /**
   * The trick here is the "next" month in combination with day "zero". Months
   * in JS dates are 0-based, we’re adding plus 1 to use the "next" month.
   * Day "zero" of JS date will use the last day of the previous month.
   */

  return new Date(year, month, 0).getDate()
}

Notice: the months in a JavaScript date instance are zero-based. That means the date.getMonth() function returns 0 for January, 1 for February, and so on. Adding a month results in the “next“ month, and using day “zero” lets JavaScript normalize the date to the last day of the previous month.

Here’s how you can use the daysInMonth function:

daysInMonth(new Date('2024-12-25'))  
// 31

daysInMonth(new Date('2024-02-01'))  
// 29

daysInMonth(new Date('2025-02-10'))  
// 28

daysInMonth(new Date('2024-13-25'))  
// NaN

Notice again: the first example from above using the date 2024-12-25 combined with the calculation of the "next" month seems to exceed the months of the year 2024. And that’s true, JavaScript proceeds with the next year 2025. And because we’re using day 0 in the calculation, JavaScript goes back to the last day of the previous year.

That’s it!

Explore the Library

Find interesting tutorials and solutions for your problems.