Moment JS最后一个月的问题

时间:2016-09-06 16:42:07

标签: javascript jquery momentjs

我在项目中使用momentJS我有一个函数,它使用monthyear并使用这些参数返回该月的最后一天。

一切正常,1月至11月,一旦我使用12月,它将在1月返回。

任何想法我如何调整这个工作?我传递了真正的月份值(5 = 5月),然后在函数中减去一个月,使其基于正常运行的时间为0。

小提琴:https://jsfiddle.net/bhhcp4cb/

// Given a year and month, return the last day of that month
function getMonthDateRange(year, month) {

    // month in moment is 0 based, so 9 is actually october, subtract 1 to compensate
    // array is 'year', 'month', 'day', etc
    var startDate = moment([year, month]).add(-1,"month");

    // Clone the value before .endOf()
    var endDate = moment(startDate).endOf('month');

    // make sure to call toDate() for plain JavaScript date type
    return { start: startDate, end: endDate };
}

// Should be December 2016
console.log(moment(getMonthDateRange(2016, 12).end).toDate())

// Works fine with November
console.log(moment(getMonthDateRange(2016, 11).end).toDate())

2 个答案:

答案 0 :(得分:5)

而不是:

var startDate = moment([year, month]).add(-1,"month");

这样做:

var startDate = moment([year, month-1]);

基本上,你不想从错误的点开始然后移动一个月,你只想从正确的点开始。

答案 1 :(得分:1)

您可以使用格式解析日期,然后片刻将正确解析日期而无需减去一个月。我认为它最终更具可读性

var startDate = moment(year + "" + month, "YYYYMM");
var endDate = startDate.endOf('month');



// Given a year and month, return the last day of that month
function getMonthDateRange(year, month) {
    var startDate = moment(year + "" + month, "YYYYMM");
    var endDate = startDate.endOf('month');

    // make sure to call toDate() for plain JavaScript date type
    return { start: startDate, end: endDate };
}

// Should be December 2016
console.log(moment(getMonthDateRange(2016, 12).end).toDate())

// Works fine with November
console.log(moment(getMonthDateRange(2016, 11).end).toDate())

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment-with-locales.min.js"></script>
&#13;
&#13;
&#13;