Moment.js无法正常运行,因为我希望两个日期之间能相隔几个月

时间:2018-11-13 11:24:06

标签: javascript momentjs

我正在尝试获取两个日期之间的月份列表。我从数组中获取开始和结束日期。我使用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)

我从here那里获得了这段代码

我得到的错误是

TypeError: dateStart.format is not a function

请纠正我在哪里做错了

控制台 console.log

1 个答案:

答案 0 :(得分:0)

使用.format("DD/MM/YYYY");时,您将返回字符串

字符串不具有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]));

我已经用密码笔将live example签出了。


更新的问题

尝试使用此代码

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