How to Determine the Number of Days in a Month with JavaScript

How to get the number of days in a month

Days left in current month

var currentDate = new Date();
var currentYear = currentDate.getFullYear();
var currentMonth = currentDate.getMonth();

var currentMonthLastDate = (new Date(currentYear, currentMonth, 0)).getDate();

var daysLeftInMonth = currentMonthLastDate - currentDate.getDate();

console.log(daysLeftInMonth);

What is the best way to determine the number of days in a month with JavaScript?

function daysInMonth (month, year) { // Use 1 for January, 2 for February, etc.
return new Date(year, month, 0).getDate();
}

console.log(daysInMonth(2, 1999)); // February in a non-leap year.
console.log(daysInMonth(2, 2000)); // February in a leap year.

get number of days in the CURRENT month using javascript

Does this do what you want?

function daysInThisMonth() {
var now = new Date();
return new Date(now.getFullYear(), now.getMonth()+1, 0).getDate();
}

Javascript: calculate number of days in month for a given year

You can play with date objects:

var monthStart = new Date(year, month, 1);
var monthEnd = new Date(year, month + 1, 1);
var monthLength = (monthEnd - monthStart) / (1000 * 60 * 60 * 24)

Arithmetic with Date objects gives a number of milliseconds.

This will even work for December; the Date constructor handles out-of-range arguments by wrapping around.

Note that month is zero-based (it must be between 0 and 11)

Count the number of days per month between two dates

Something like this? You get the days per month even for leap years like february 2020.

function getDays() {    var dropdt = new Date(document.getElementById("arr").value);    var pickdt = new Date(document.getElementById("dep").value);    var result = "";    for (var year = dropdt.getFullYear(); year <= pickdt.getFullYear(); year++) {        var firstMonth = (year == dropdt.getFullYear()) ? dropdt.getMonth() : 0;        var lastMonth = (year == pickdt.getFullYear()) ? pickdt.getMonth() : 11;        for (var month = firstMonth; month <= lastMonth; month++) {            var firstDay = (year === dropdt.getFullYear() && month === firstMonth) ? dropdt.getDate() : 1;            var lastDay = (year === pickdt.getFullYear() && month === lastMonth) ? pickdt.getDate() : 0;            var lastDateMonth = (lastDay === 0) ? (month + 1) : month            var firstDate = new Date(year, month, firstDay);            var lastDate = new Date(year, lastDateMonth, lastDay);            result += (month + 1) + " - " + parseInt((lastDate - firstDate) / (24 * 3600 * 1000) + 1) + "; ";        }    }    return result;}
function cal() { if (document.getElementById("dep")) { document.getElementById("number-of-dates").value = getDays(); }}
<form action="javascript:void(0);">  <input id="arr" type="date" name="arr" value="2019-09-15">   <input id="dep" type="date" name="dep" value="2020-03-15">  <button onclick="cal()">Calculate</button>  <input style="width:400px" id="number-of-dates" type="text"></form>

Get no of days in current month in javascript

function _getDates(year, month) {  return new Date(year, month, 0).getDate(); // 0 + number of days}console.log(_getDates(2016, 07))

Get days, weeks, months from a number of days in javascript

this:

function(days) {
var months = parseInt(days / 30);
days = days - months * 30;
var weeks = parseInt(days / 7);
days = days - weeks * 7;
return (months > 0 ? months + " month" + (months > 1 ? "s, " : ", ") : "") + (weeks > 0 ? weeks + " week" + (weeks > 1 ? "s, " : ", ") : "") + (days > 0 ? days + " day" + (days > 1 ? "s, " : ", ") : "")
}

Find all the days in a month with Date object?

To get a list of all days in a month, you can start with a Date on the first day of a month, increase the day until the month changes.

/**
* @param {int} The month number, 0 based
* @param {int} The year, not zero based, required to account for leap years
* @return {Date[]} List with date objects for each day of the month
*/
function getDaysInMonth(month, year) {
var date = new Date(year, month, 1);
var days = [];
while (date.getMonth() === month) {
days.push(new Date(date));
date.setDate(date.getDate() + 1);
}
return days;
}

UTC Version

In response to some comments, I've created a version that uses UTC methods in case you want to call UTC methods instead of the standard methods that return the localized time zone.

I suspect this is the culprit of the comments saying this didn't work. You typically want to make sure you call getUTCMonth/Day/Hours methods if you instantiated it with Date.UTC, and vice-versa, unless you are trying to convert time zones and show differences.

function getDaysInMonthUTC(month, year) {
var date = new Date(Date.UTC(year, month, 1));
var days = [];
while (date.getUTCMonth() === month) {
days.push(new Date(date));
date.setUTCDate(date.getUTCDate() + 1);
}
return days;
}

Editing This Answer

If you think there's a problem with this script, please feel free to:

  • First see existing unit tests below
  • Write a test case that proves it's broken.
  • Fix the code, making sure existing tests pass.

Unit Tests

/**
* @param {int} The month number, 0 based
* @param {int} The year, not zero based, required to account for leap years
* @return {Date[]} List with date objects for each day of the month
*/
function getDaysInMonthUTC(month, year) {
var date = new Date(Date.UTC(year, month, 1));
var days = [];
while (date.getUTCMonth() === month) {
days.push(new Date(date));
date.setUTCDate(date.getUTCDate() + 1);
}
return days;
}

function getDaysInMonth(month, year) {
var date = new Date(year, month, 1);
var days = [];
while (date.getMonth() === month) {
days.push(new Date(date));
date.setDate(date.getDate() + 1);
}
return days;
}

const days2020 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const days2021 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

describe("getDaysInMonthUTC", function() {
it("gets day counts for leap years", function() {
const actual = days2020.map(
(day, index) => getDaysInMonthUTC(index, 2020).length
);
expect(actual).toEqual(days2020);
});

it("gets day counts for non-leap years", function() {
const actual = days2021.map(
(day, index) => getDaysInMonthUTC(index, 2021).length
);
expect(actual).toEqual(days2021);
});
});

describe("getDaysInMonth", function() {
it("gets day counts for leap years", function() {
const actual = days2020.map(
(day, index) => getDaysInMonth(index, 2020).length
);
expect(actual).toEqual(days2020);
});

it("gets day counts for non-leap years", function() {
const actual = days2021.map(
(day, index) => getDaysInMonth(index, 2021).length
);
expect(actual).toEqual(days2021);
});
});

// load jasmine htmlReporter
(function() {
var env = jasmine.getEnv();
env.addReporter(new jasmine.HtmlReporter());
env.execute();
}());
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.js"></script>
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine-html.js"></script>
<link href="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.css" rel="stylesheet"/>


Related Topics



Leave a reply



Submit