-
Star
(108)
You must be signed in to star a gist -
Fork
(27)
You must be signed in to fork a gist
-
-
Save miguelmota/7905510 to your computer and use it in GitHub Desktop.
// Returns an array of dates between the two dates | |
function getDates (startDate, endDate) { | |
const dates = [] | |
let currentDate = startDate | |
const addDays = function (days) { | |
const date = new Date(this.valueOf()) | |
date.setDate(date.getDate() + days) | |
return date | |
} | |
while (currentDate <= endDate) { | |
dates.push(currentDate) | |
currentDate = addDays.call(currentDate, 1) | |
} | |
return dates | |
} | |
// Usage | |
const dates = getDates(new Date(2013, 10, 22), new Date(2013, 11, 25)) | |
dates.forEach(function (date) { | |
console.log(date) | |
}) |
Thanks @Ben52
My version which strips hours, minutes, seconds etc. and does not declare an inline function:
// Returns an array of dates between the two dates
const getDatesBetween = (startDate, endDate) => {
const dates = [];
// Strip hours minutes seconds etc.
let currentDate = new Date(
startDate.getFullYear(),
startDate.getMonth(),
startDate.getDate()
);
while (currentDate <= endDate) {
dates.push(currentDate);
currentDate = new Date(
currentDate.getFullYear(),
currentDate.getMonth(),
currentDate.getDate() + 1, // Will increase month if over range
);
}
return dates;
};
// Usage
const dates = getDates(new Date(2018, 0, 30, 11, 30), new Date(2018, 2, 2, 23, 59, 59));
console.log(dates);
Thanks @aalexgabi, it resolved my problem 💯
Help me sir,
how to check between two date range???
Example
from date=03-07-2018
to date=13-07-2018
how to check date range between them in javascript
@sibelius can you elaborate on how you use that function? For instance, it looks like you have another file you are including. What does that look like? Thanks in advance!
import moment from 'moment';
getStandAge = startDate => { const age = moment().diff(startDate, 'months'); return isNaN(age) ? null : age; };
Please i would need help, i would like to do this using two date time picker and insert the dates in between the date time picker in a database but i dont know how to go about this in vb.net. Someone should help me please
I made something more generic
it uses date-fns and does not mutate the array
import { addDays, addMonths, differenceInDays, differenceInMonths } from 'date-fns'; import { PERIOD } from './PeriodEnumType'; export function dateRange(startDate, endDate, interval) { if (interval === PERIOD.DAY) { const days = differenceInDays(endDate, startDate); return [...Array(days+1).keys()].map((i) => addDays(startDate, i)); } if (interval === PERIOD.MONTH) { const months = differenceInMonths(endDate, startDate); return [...Array(months+1).keys()].map((i) => addMonths(startDate, i)); } }
Can u help using two date time picker and insert the dates in a database in vb.net
Worked Perfectly.... thanks :-)
Here's a function to get a range of dates, split up by any key, ex. month, day, year, etc.
const moment = require('moment'); function getRangeOfDates(start, end, key, arr = [start.startOf(key)]) { if(start.isAfter(end)) throw new Error('start must precede end') const next = moment(start).add(1, key).startOf(key); if(next.isAfter(end, key)) return arr; return getRangeOfDates(next, end, key, arr.concat(next)); }
So if I wanted to get an array of months from the start of the year until a year from now, I would go:
const begin = moment().startOf('year') const end = moment().add(1, 'year') getRangeOfDates(begin, end, 'month');
Which would return:
[ moment("2017-01-01T00:00:00.000"), moment("2017-02-01T00:00:00.000"), moment("2017-03-01T00:00:00.000"), moment("2017-04-01T00:00:00.000"), moment("2017-05-01T00:00:00.000"), moment("2017-06-01T00:00:00.000"), moment("2017-07-01T00:00:00.000"), moment("2017-08-01T00:00:00.000"), moment("2017-09-01T00:00:00.000"), moment("2017-10-01T00:00:00.000"), moment("2017-11-01T00:00:00.000"), moment("2017-12-01T00:00:00.000"), moment("2018-01-01T00:00:00.000"), moment("2018-02-01T00:00:00.000"), moment("2018-03-01T00:00:00.000"), moment("2018-04-01T00:00:00.000"), moment("2018-05-01T00:00:00.000"), moment("2018-06-01T00:00:00.000"), moment("2018-07-01T00:00:00.000"), moment("2018-08-01T00:00:00.000"), moment("2018-09-01T00:00:00.000") ]
Thanks a lot
It works but I have a problem with the month.
I run it like that:
var dates = getDates(new Date(2019,04,16), new Date(2019,04,17));
dates.forEach(function(date) {
console.log(date);
});
And the result is:
Thu May 16 2019 00:00:00 GMT+0300 (Israel Daylight Time)
Fri May 17 2019 00:00:00 GMT+0300 (Israel Daylight Time)
I received May instead of April, why? What am I missing?
Hi @nivduran. When using the Date constructor like that:
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
keep in mind that the monthIndex parameter is 0-based. This means that January = 0 and December = 11.
In your case, you used 4 as the monthIndex parameter, which means the fifth month of the year which is May.
Thanks @aalexgabi
How about filling missing dates inside arrays
var array=[
{date:"2016-11-17T00:00:00"}, //start
{date:"2016-11-19T00:00:00"},
{date:"2016-11-18T00:00:00"},
{date:"2016-11-21T00:00:00"},
{date:"2016-11-22T00:00:00"},
{date:"2016-11-23T00:00:00"},
{date:"2017-11-27T00:00:00"},//end
];
Actually very useful for charts that has missing data.
Very good, thank you sir!
if you are looking for specific days of the week this will give them to you granted you provide a string array, otherwise, just dont use the if statement .
import * as moment from "moment";
import * as _ from 'lodash';
getDatesOfDays(startDate: moment.Moment, endDate: moment.Moment, dayArray: string[]) {
var range = [];
var dayNames = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
while (moment(startDate) <= moment(endDate)){
if (dayArray.includes(dayNames[startDate.day()])) {
range.push(startDate.clone());
}
startDate.add(1 , 'days');
}
return range;
}
https://gist.github.com/miguelmota/7905510#file-getdates-js
It's very pretty.
I solved my problem.
Node.js & ES6
get days diff between two dates and output all weekdays in between including start and end dates.
return an array of dates.
const moment = require("moment");
const getDatesDiff = (start_date, end_date, date_format = "YYYY-MM-DD") => {
const getDateAsArray = date => {
return moment(date.split(/\D+/), date_format);
};
const diff = getDateAsArray(end_date).diff(getDateAsArray(start_date), "days") + 1;
const dates = [];
for (let i = 0; i < diff; i++) {
const nextDate = getDateAsArray(start_date).add(i, "day");
const isWeekEndDay = nextDate.isoWeekday() > 5;
if (!isWeekEndDay)
dates.push(nextDate.format(date_format))
}
return dates;
};
Use:
const date_log = getDaysDiff ('2019-10-17', '2019-10-25');
console.log(date_log);
output:
date_log =
[ '2019-10-17',
'2019-10-18',
'2019-10-21',
'2019-10-22',
'2019-10-23',
'2019-10-24',
'2019-10-25'
]
I tried this and it was returned wrong
getDates(new Date(2019,12,22), new Date(2020,1,7));
Wed Jan 22 2020 00:00:00 GMT+0700 (Indochina Time)
Thu Jan 23 2020 00:00:00 GMT+0700 (Indochina Time)
Jan 24 2020 00:00:00 GMT+0700 (Indochina Time)
Sat Jan 25 2020 00:00:00 GMT+0700 (Indochina Time)
Sun Jan 26 2020 00:00:00 GMT+0700 (Indochina Time)
Mon Jan 27 2020 00:00:00 GMT+0700 (Indochina Time)
Tue Jan 28 2020 00:00:00 GMT+0700 (Indochina Time)
Wed Jan 29 2020 00:00:00 GMT+0700 (Indochina Time)
Thu Jan 30 2020 00:00:00 GMT+0700 (Indochina Time)
Fri Jan 31 2020 00:00:00 GMT+0700 (Indochina Time)
Sat Feb 01 2020 00:00:00 GMT+0700 (Indochina Time)
Sun Feb 02 2020 00:00:00 GMT+0700 (Indochina Time)
Mon Feb 03 2020 00:00:00 GMT+0700 (Indochina Time)
Tue Feb 04 2020 00:00:00 GMT+0700 (Indochina Time)
Wed Feb 05 2020 00:00:00 GMT+0700 (Indochina Time)
Thu Feb 06 2020 00:00:00 GMT+0700 (Indochina Time)
Fri Feb 07 2020 00:00:00 GMT+0700 (Indochina Time)
Thanks for the code.
Please provide code for getting hours in between two dates with JavaScript.
Example
let date1 = new Date(1582545600000) // 24th Feb 17:30
let date2 = new Date(1582574400000) // 25th Feb 01:30
getHourWiseDates(date1, date2);
Output
[ { start_hour: 1582545600000 // 24th Feb 17:30 end_hour: 1582547399099 // 24th Feb 17:59 }, { start_hour: 1582547400000 // 24th Feb 18:00 end_hour: 1582550999099 // 24th Feb 18:59 } ... ... ... { start_hour: 1582572600000 //25th Feb 01:00 end_hour: 1582574400000 // 25th Feb 01:30 } ]
Using dayjs
and accepting any of the dayjs
supported types (from millisecond to year), in typescript and returning either Date
s or number
s (unix timestamps in milliseconds)
export function dateRange(
start: Date | number,
end: Date | number,
interval: "millisecond" | "second" | "minute" | "hour" | "day" | "week" | "month" | "year",
asUnixTimestampsMS = false,
): (number | Date)[] {
const startDate = dayjs(start);
const endDate = dayjs(end);
const diffInUnits = endDate.diff(startDate, interval)
return Array.from(Array(diffInUnits + 1).keys()).map((i) => {
return asUnixTimestampsMS ? startDate.add(i, interval).valueOf() : startDate.add(i, interval).toDate()
});
}
I'm selected dates
24-01-2022
25-01-2022
but I get
Thu Feb 24 2022 00:00:00 GMT+0530 (India Standard Time)
Fri Feb 25 2022 00:00:00 GMT+0530 (India Standard Time)
and my code
var dests = getDates(new Date(des[2],des[1],des[0]), new Date(des1[2],des1[1],des1[0]));
dests.forEach(function(date) {
console.log(dests);
});
how to fix it?
Perfectly.. Thanks u bro
This for Get range dates, work for me
var start = '24-01-2022';
var end = '26-01-2022';
var dates = getDates(new Date(start), new Date(end));
// dates.forEach(function(date) {
// console.log(date);
// });
// Get Range Dates
console.log(dates.length);
Life saver. Thank you @miguelmota.
I would convert it to TypeScript version.
const getDates = (startDate: Date, endDate: Date) => {
const dates = []
let currentDate = startDate
const addDays = (currentDate: Date, days: number) => {
const date = new Date(currentDate)
date.setDate(date.getDate() + days)
return date
}
while (currentDate <= endDate) {
dates.push(currentDate)
currentDate = addDays(currentDate, 1)
}
return dates
}
I would convert it to TypeScript version.
const getDates = (startDate: Date, endDate: Date) => { const dates = [] let currentDate = startDate const addDays = (currentDate: Date, days: number) => { const date = new Date(currentDate) date.setDate(date.getDate() + days) return date } while (currentDate <= endDate) { dates.push(currentDate) currentDate = addDays(currentDate, 1) } return dates }
Thank you
Thanks @Ben52