3

例子:

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

3 回答 3

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/

于 2012-12-26T22:46:51.757 回答
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;
    }

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

于 2012-12-26T23:13:30.360 回答
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 个月,但获得下一个 3 月则不需要。

function getNextJan(){
    var j = moment().month(0).date(1).hour(0).minute(0).second(0)
    if(j < moment()) return j.month(12)
    return j
}
于 2015-02-22T20:50:02.433 回答