Как получить месяц и год от прошедшей даты до сих пор JavaScript - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь выяснить, как получить комбинации года и месяца от прошедшей даты до настоящего момента.

Итак, скажем, прошедшая дата задается как

const date = "December 2019"

Тогда мне нужен массив

const arrayOfMonths = [ "April 2020", "March 2020", "February 2020", "January 2020", "December 2019"]

Ответы [ 3 ]

2 голосов
/ 23 апреля 2020

Вы можете использовать JavaScript Дата объектов и некоторое время l oop.

Просто вычтите месяц из текущего месяца, пока не получите желаемую дату.

Нечто подобное должно работать.

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);
1 голос
/ 23 апреля 2020

Эта функция генерирует список месяцев и лет, как в приведенном вами примере. Обратите внимание, что входные данные ожидают строку формата MONTH FULLYEAR, и любой другой формат строк, скорее всего, даст неправильные результаты. Сказав, что я бы предложил передать Date объект или метку времени, если это возможно

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"))
1 голос
/ 23 апреля 2020

я сделал это, используя javascript функции даты

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);

есть место для улучшения, но он выполняет свою работу

...