2

I'm trying to figure out how to get combinations of year and month from the past date up till now.

So lets say, the past date is given as

const date = "December 2019"

Then I need an array

const arrayOfMonths = [ "April 2020", "March 2020", "February 2020", "January 2020", "December 2019"]
yukashima huksay
  • 5,834
  • 7
  • 45
  • 78
Yukichka
  • 144
  • 2
  • 9

3 Answers3

3

You can use JavaScript Date objects and a while loop.

Just subtract a month from the current month till you get to the date you want.

Something like this should work.

https://jsfiddle.net/wsf61jpk/5/

var date="December 2018";
var result=[];

//set both start and end date to first date of the month
const end_date = new Date(date.replace(" ", " ,1 "));
const start_date = new Date(new Date().getFullYear(), new Date().getMonth(), 1);


while(end_date<=start_date){

result.push(start_date.toLocaleString('default', { month: 'long' , year: 'numeric'}));
start_date.setMonth(start_date.getMonth() - 1);

}

console.log(result);
George Pant
  • 2,079
  • 1
  • 9
  • 14
1

i did it using by leveraging the javascript date functions

var oldDate = "December 2019";
var old = new Date(Date.parse(oldDate));
var today = new Date();
var yearsCount= today.getFullYear() - old.getFullYear();
var monthsArr = [];
for(var i = 0; i<=yearsCount;i++){
for(var j = 0; j<12;j++){
//skipping the months before the month in old date and the after the month in the current day
if(i==0 && j<old.getMonth()) continue;
if(i==yearsCount && j>today.getMonth()) continue;
// creating a new date in the format : mm-dd-yyyy (with dd=01) 
var newDate = new Date((j+1)+"-01-"+(old.getFullYear()+i))
//using to localestring to transfrom the date created into format : month year
var newmonth = newDate.toLocaleString('default', { month: 'long',year:'numeric' });
//pushing to the array
monthsArr.push(newmonth);
}
}
console.log(monthsArr);

there is a room for improvement but it gets the job done

Moussaabmma
  • 78
  • 1
  • 1
  • 8
1

This function is generating a list of the months and years as in example you provided. Note that input is expecting string of format MONTH FULLYEAR and any other format of the strings most likely will produce wrong results. Having said that I'd suggest to pass Date object or timestamp if it's possible

function generateMonthsAndYears(startingFromDateString) {
  const cur = new Date(`15 ${startingFromDateString}`)
  const untilDateString = new Date(new Date().getFullYear(), new Date().getMonth()+1, 15).toDateString();

  const result = [];

  for(; untilDateString !== cur.toDateString(); cur.setMonth(cur.getMonth()+1))
    result.push(cur.toLocaleString('en-us', { month: 'long', year: 'numeric' }))

  return result;
}

console.log(generateMonthsAndYears("December 2018"))
ruX
  • 7,224
  • 3
  • 39
  • 33