получить дату начала и окончания последних 6 месяцев Javascript в react native - PullRequest
0 голосов
/ 20 июня 2020

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

Пример # 1 Текущий год:

  • июнь 2020 (текущий месяц)
  • май 2020
  • апрель 2020
  • март 2020
  • февраль 2020
  • январь 2020

Пример № 2, если предыдущий год наступает в последние шесть месяцев:

  • март 2020
  • февраль 2020
  • январь 2020
  • декабрь 2019
  • Ноябрь 2019
  • Октябрь 2019

поэтому я создаю JS новый объект Date и пробую подход с указанным ниже кодом, но не знаю, зачем --------- Date {NaN} в собственном реагировании

Вот подход, который я пытался заставить это работать, но не добился успеха

    let date = new Date()
    let year = date.getFullYear()
    const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];


    //Getting last 6 months from current date
    let currentMonth = date.getMonth(),
        previousMonth_1 = date.getMonth() - 1,
        previousMonth_2 = date.getMonth() - 2,
        previousMonth_3 = date.getMonth() - 3,
        previousMonth_4 = date.getMonth() - 4,
        previousMonth_5 = date.getMonth() - 5

    // getting total days of month
    const getDaysInMonth = (month, year) => {
        return new Date(year, month, 0).getDate();
    };


    //create function which will return the start and end object
    const getDate = (month) => {

        let addZeroInMonth = month < 10 ? `0${month + 1}` : month + 1

        return {
            startDate: new Date(`${year},${addZeroInMonth},1`),
            endDate: new Date(`${year},${addZeroInMonth},${getDaysInMonth(addZeroInMonth, year)}`),
        }
    }


    //Store each month
    let m1 = getDate(currentMonth)
    let m2 = getDate(previousMonth_1)
    let m3 = getDate(previousMonth_2)
    let m4 = getDate(previousMonth_3)
    let m5 = getDate(previousMonth_4)
    let m6 = getDate(previousMonth_5)



    //create array for last six months to pass in API on select
    let filter = [
        {
            label: 'Current',
            "startDate": `${m1.startDate} 00:00:00`,
            "endDate": `${m1.endDate} 00:00:00`,
        },
        {
            label: months[previousMonth_1] + ' ' + year,
            "startDate": `${m2.startDate} 00:00:00`,
            "endDate": `${m2.endDate} 00:00:00`,
        },
        {
            label: months[previousMonth_2] + ' ' + year,
            "startDate": `${m3.startDate} 00:00:00`,
            "endDate": `${m3.endDate} 00:00:00`,
        },
        {
            label: months[previousMonth_3] + ' ' + year,
            "startDate": `${m4.startDate} 00:00:00`,
            "endDate": `${m4.endDate} 00:00:00`,
        },
        {
            label: months[previousMonth_4] + ' ' + year,
            "startDate": `${m5.startDate} 00:00:00`,
            "endDate": `${m5.endDate} 00:00:00`,
        },
        {
            label: months[previousMonth_5] + ' ' + year,
            "startDate": `${m6.startDate} 00:00:00`,
            "endDate": `${m6.endDate} 00:00:00`,
        },
    ]

, к сожалению, получаю этот вывод в реагировать на родной

 {"endDate": Date { NaN }, "startDate": Date { NaN }}
 {"endDate": Date { NaN }, "startDate": Date { NaN }}

, но если я запускаю этот код в браузере, он работает нормально, и я также могу извлечь год, месяц, d ау от него

Wed Jan 01 2020 00:00:00 GMT+0530 (India Standard Time)
Fri Jan 31 2020 00:00:00 GMT+0530 (India Standard Time)

Нужно что-то подобное для отправки данных в API

LOG  {"endDate": "2020-06-30 00:00:00", "label": "Current", "startDate": "2020-06-01 00:00:00"}
LOG  {"endDate": "2020-05-31 00:00:00", "label": "May 2020", "startDate": "2020-05-01 00:00:00"}     
LOG  {"endDate": "2020-04-30 00:00:00", "label": "April 2020", "startDate": "2020-04-01 00:00:00"}   
LOG  {"endDate": "2020-03-31 00:00:00", "label": "March 2020", "startDate": "2020-03-01 00:00:00"}   
LOG  {"endDate": "2020-02-29 00:00:00", "label": "February 2020", "startDate": "2020-02-01 00:00:00"}
LOG  {"endDate": "2020-01-31 00:00:00", "label": "January 2020", "startDate": "2020-01-01 00:00:00"}

введите описание изображения здесь

1 Ответ

0 голосов
/ 19 августа 2020

Вы можете использовать момент. js и вот скрипт для получения объектов даты за последние шесть месяцев. var now = moment ();

const endDate = now.format('MM-DD-YYYY')
const startDate = moment().date(1).month(now.month()).year(now.year()).format('MM-DD-YYYY')

console.log('sixth')

console.log(startDate);
console.log(endDate);

function getStartAndEndDate(month, year) {
    month = month - 1;
    year = month === -1 ? (year - 1) : year;
    const lastDate = moment().date(1).month(month).daysInMonth();

    return {
      startDate: moment().date(1).month(month).year(year).format('MM-DD-YYYY'),
      endDate: moment().date(lastDate).month(month).year(year).format('MM-DD-YYYY'),
      date: moment().date(1).month(month).year(year),
  }
}

const fifthMonth = getStartAndEndDate(now.month(), now.year());
console.log('fifth')

console.log(fifthMonth.startDate);
console.log(fifthMonth.endDate);

const fourthMonth = getStartAndEndDate(fifthMonth.date.month(), fifthMonth.date.year());
console.log('fourth')

console.log(fourthMonth.startDate);
console.log(fourthMonth.endDate);

const thirdMonth = getStartAndEndDate(fourthMonth.date.month(), fourthMonth.date.year());
console.log('third')

console.log(thirdMonth.startDate);
console.log(thirdMonth.endDate);

const secondMonth = getStartAndEndDate(thirdMonth.date.month(), thirdMonth.date.year());
console.log('second')

console.log(secondMonth.startDate);
console.log(secondMonth.endDate);

const firstMonth = getStartAndEndDate(secondMonth.date.month(), secondMonth.date.year());
console.log('firsth')

console.log(firstMonth.startDate);
console.log(firstMonth.endDate);

https://jsfiddle.net/khalid3n/yu1hbdw4/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...