在Moment.js中,您如何获得特定月份下一次出现的日期(例如:'下一月'=> 2013-01-01)?

时间:2012-12-26 22:31:46

标签: momentjs

示例:

  • 现在是2012年3月26日。我要求明年2月。它应该返回2013-01-01
  • 现在是2012年3月26日。我要求明年4月。它应该返回2012-04-01

3 个答案:

答案 0 :(得分:5)

你可以这样做。

// date is a JS date or moment
// month is the zero indexed month (0 - 11)
function nextMonth(date, month) {
    var input = moment(date);
    var output = input.clone().startOf('month').month(month);
    return output > input ? output : output.add(1, 'years');
}

请参阅有关操纵片刻的文档。 http://momentjs.com/docs/#/manipulating/

答案 1 :(得分:2)

写道:

    /**
        @var date is a JS date or moment
        @var month is the month in the 0-11 format
     */
    var getNextMonthOccurrence: function(date, month){
        var m = moment(date);

        var this_year = new Date(m.year(), month, 1);
        var next_year = new Date(m.year() + 1, month, 1);

        return this_year > m ? this_year : next_year;
    }

但是必须有更好的方法来做到这一点......

答案 2 :(得分:1)

明年1月1日: moment().month(0+12).date(1).hour(0).minute(0).second(0)

明年3月17日: moment().month(2).date(17).hour(0).minute(0).second(0)

编辑:你只需要注意创建的日期是否比现在少。由于它目前在2月份,下一个1月需要增加12个月,但下次游行不会。

function getNextJan(){
    var j = moment().month(0).date(1).hour(0).minute(0).second(0)
    if(j < moment()) return j.month(12)
    return j
}