дата JavaScript, получите последние 12 месяцев - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу получить последние 12 месяцев для работающего 12-месячного графика.

Это то, что я делаю

function formatDate(date) {

    date = new Date(date);
    var day = date.getDate();
    var monthIndex = date.getMonth();
    var year = date.getFullYear();

    return day + ' ' + monthIndex + ' ' + year;
}

let now = new Date();

for ( let i=12; i>0; i--) {
    let newdate = now.setMonth(now.getMonth() - i);
    console.log(formatDate(newdate ));
}

И это то, что я получаю: (Нена все, что я ожидаю.)

19 1 2018
19 2 2017
19 4 2016
19 7 2015
19 11 2014
19 4 2014
19 10 2013
19 5 2013
19 1 2013
19 10 2012
19 8 2012
19 7 2012

Что я хочу

19 2 2018
19 3 2018
19 4 2018
19 5 2018
19 6 2018
19 7 2018
19 8 2018
19 9 2018
19 10 2018
19 11 2018
19 0 2019
19 1 2019

Ответы [ 4 ]

0 голосов
/ 20 февраля 2019

Вы хотите вычесть только 1 месяц, поэтому не используйте i, потому что это динамическое значение.Первый цикл не нужно вычитать, так что делайте, как показано ниже

Обновлено: вам нужно переместить объявление текущей даты в цикле, потому что setMonth изменит ваше значение даты, поэтому необходимо вызывать текущую дату каждый раз, когда вы делаете цикл ...

function formatDate(date) {

    date = new Date(date);
    var day = date.getDate();
    var monthIndex = date.getMonth();
    var year = date.getFullYear();

    return day + ' ' + monthIndex + ' ' + year;
}

for ( let i=11; i>=0; i--) {
    let now = new Date();
    let newdate = now.setMonth(now.getMonth() - i);
    console.log(formatDate(newdate ));
}
0 голосов
/ 20 февраля 2019

setMonth изменяет дату, она не возвращает измененную копию.Итак, в первый раз, когда вы звоните setMonth, вы переносите дату назад на 12 месяцев.В следующий раз вы вернете его на 11 месяцев назад, в общей сложности на 23 месяца.Затем вы перемещаете его назад на 10 месяцев, что в сумме составляет 33.

Вместо того, чтобы постоянно перемещать дату назад на 12 - i, просто переместите ее назад на 1 месяц за раз:

now.setMonth(now.getMonth() - 1);
0 голосов
/ 20 февраля 2019

изменить это

 now.getMonth() - i

на это

now.getMonth() - 1

function formatDate(date) {

    date = new Date(date);
    var day = date.getDate();
    var monthIndex = date.getMonth();
    var year = date.getFullYear();

    return day + ' ' + monthIndex + ' ' + year;
}

let now = new Date();

for ( let i=12; i>0; i--) {
    let newdate = now.setMonth(now.getMonth() - 1);
    console.log(formatDate(newdate ));
}
0 голосов
/ 20 февраля 2019

Измените

let newdate = now.setMonth(now.getMonth() - i);

на

let newdate = now.setMonth(now.getMonth() - 1);

В исходном коде легко увидеть, что значение месяца уменьшается на 1, 2, 3 и т. Д.На каждой итерации вам нужно только вычесть 1.

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