在moment.js中获得月中的最后一个星期一

时间:2014-08-04 20:15:37

标签: javascript momentjs

有没有办法让我用moment.js获得本月的最后一个星期一?

我知道我可以在月底结束: moment().endOf('month')

但最后一个星期一怎么样?

4 个答案:

答案 0 :(得分:14)

你几乎就在那里。你只需要添加一个简单的循环来逐步后退,直到找到星期一:

result = moment().endOf('month');
while (result.day() !== 1) {
    result.subtract(1, 'day');
}
return result;

答案 1 :(得分:11)

你总是在isoweek星期一得到:

moment().endOf('month').startOf('isoweek')

答案 2 :(得分:1)

moment().endOf('month').day('Monday')

答案 3 :(得分:-2)

我为此设置dropin,一旦你安装/添加它,你就可以这样做:

moment().endOf('month').subtract(1,'w').nextDay(1)

该代码在月末减去1周,然后在下周一。

为简化此操作,您可以:

days = moment().allDays(1) //=> mondays in the month
days[days.length - 1] //=> last monday

本月的所有星期一,然后选择第一个星期一。

您可以像这样进一步简化:

moment().allDays(1).pop()

但这会从列表中删除星期一 - 但如果您没有使用该列表(如上例所示),那就无所谓了。如果是,您可能需要这样:

moment().allDays(1).last()

但它需要一个pollyfill:

if (!Array.prototype.last){
    Array.prototype.last = function(){
        return this[this.length - 1];
    };
};