is there a way to have all the days of a month or of a year? I am looking for this in order to disable some specific days in a datepicker, i would have a page in the back-office to select these days to disable.
So i would need to show all the days in a month, and add a "activate or deactive" button below each day. Is there a way to find these days with the Date object? I found this link for example : Displaying all the days of a month but i don't really understand it, plus it is Java, i am trying to find a solution in javascript.
Thank you for your help
To get the day of the month, use the getDate() method. JavaScript date getDate() method returns the day of the month for the specified date according to local time. The value returned by getDate() is an integer between 1 and 31.
function getAllDaysInMonth(year, month) { const date = new Date(year, month, 1); const dates = []; while (date. getMonth() === month) { dates. push(new Date(date)); date.
JavaScript getDate() Method: This method returns the number of days in a month (from 1 to 31) for the defined date. Return value: It returns a number, from 1 to 31, representing the day of the month.
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; }
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; }
If you think there's a problem with this script, please feel free to:
/** * @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"/>
One liner to get all days as Date object in a month
const getDaysInMonth = (month, year) => (new Array(31)).fill('').map((v,i)=>new Date(year,month-1,i+1)).filter(v=>v.getMonth()===month-1)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With