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
Positioning Multiple, Random Sized, Absolutely Positioned Elements So They Don't Overlap
How to Use CSSstylesheet.Insertrule() Properly
How to Remove Imported CSS in Reactjs
How to Create Dynamic Elements Inside Global Tabs
How to Check If an Element Exists in the Visible Dom
How to Remove "Disabled" Attribute Using Jquery
Cross-Browser Window Resize Event - JavaScript/Jquery
Jquery Ajax Success Callback Function Definition
Why Is Arr = [] Faster Than Arr = New Array
Detect Double Tap on iPad or iPhone Screen Using JavaScript
Fcm - Programmatically Send Push Notification to User Segments
Draw a Circle Around Nodes Groups
Accessing JavaScript Variable from Ruby
Difference Between Statement and Function
Working Twitter-Typeahead Example