Moment.js не работает, как я ожидал, получая месяцы между двумя датами - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь получить список месяцев между двумя датами. Даты начала и окончания я взял из массива. Я использовал moment.js, чтобы сделать это. Вот мой код

    var Start = moment(new Date(data2[0])).format("YYYY-MM-DD")
var End = moment(new Date(data2[data2.length-1])).format("YYYY-MM-DD")

console.log(Start) //It prints 2018-08-08
console.log(End)   //It prints 2019-01-04

var dateStart = moment(Start)
var dateEnd = moment(End)
var timeValues = [];


while (moment(dateEnd) > moment(dateStart) || moment(dateStart).format('MM') === moment(dateEnd).format('MM')) {
   timeValues.push(moment(dateStart).format('YYYY-MM'));
   moment(dateStart).add(1,'month');
}

alert (timeValues)

Я получил этот код от здесь

Я получаю ошибку

TypeError: dateStart.format is not a function

Пожалуйста, поправьте меня, где я делаю неправильно

Консоль console.log

1 Ответ

0 голосов
/ 13 ноября 2018

Когда вы используете .format("DD/MM/YYYY");, вы возвращаете String .

Строка не имеет функции format, как указано в сообщении об ошибке.

                                v -- error here
var dateStart = moment(data2[0]).format("DD/MM/YYYY");

Строка выше возвращает String, вы хотите использовать format функцию в момент Date объект.

Попробуйте что-то вроде этого (предположим, что data2[data2.length-1] и data2[0] являются действительными датами):

 var dateStart = moment(new Date(data2[0]));
 var dateEnd = moment(new Date(data2[data2.length-1]));

Я сделал живой пример , используя кодовое перо, посмотрите его.


Обновленный вопрос

Попробуйте использовать этот код

var dateStart = moment("2018-08-08").format("DD/MM/YYYY"); //#08/08/2018
var dateEnd = moment("2019-04-01").format("DD/MM/YYYY"); //#01/04/2019

var timeValues = [];
dateEndObj = moment(dateEnd);
dateStartObj = moment(dateStart);

while (dateEndObj > dateStartObj || dateStartObj.format('MM') === dateEndObj.format('MM')) {
   timeValues.push(dateStartObj.format('YYYY-MM'));
   dateStartObj.add(1,'month');
}

alert (timeValues);
...