1

我需要使用 moment.js 的去年 9 月的日期——但是是动态的。

当前日期

currentDate:string = moment().format('YYYY-MM'); // This will be 2017-10

如何知道最后一个 9 月是从当前日期开始的时间?我需要这样的想法:

lastSteptember = moment(this.currentDate).getDateOfLast('september').format('YYYY-MM');

所以从现在开始的结果是:

2017-09

但在 3 个月前,结果将是另一个:

2016-09

我如何使用 moment.js 处理这个问题?

4

4 回答 4

1

我不知道如何让它与时刻一起工作。但是您可以使用我的函数按月号获取上个月:

var getLastMonth = function(month){
        if(month<1 || month>12) return undefined;
        let year = (month<=moment().month())? (moment().year()) : (moment().year()-1);
        return moment(month + "-" + year, "MM-YYYY");
}

用它:

getLastMonth(11); //return 11-2016

getLastMonth(10); //return 10-2017

getLastMonth(9); //return 09-2017
于 2017-10-27T09:07:18.537 回答
1

我找到了一个漂亮的解决方案并像这样解决了它:

currentYear: number = moment().year();
lastYear: number = moment().subtract(1, 'years').year();
nextYear: number = moment().add(1, 'years').year();

if(moment().isSameOrAfter(this.currentYear + '-09-01', 'month')) {
  this.currentServiceYearStartDate = this.currentYear + '-09-01';
  this.currentServiceYearEndDate = this.nextYear + '-08-31';
} else {
  this.currentServiceYearStartDate = this.lastYear + '-09-01';
  this.currentServiceYearEndDate = this.currentYear + '-08-31';
}

console.log('Startdate: ' + this.currentServiceYearStartDate);
console.log('Enddate: ' + this.currentServiceYearEndDate);

https://momentjs.com/docs/#/query/is-same-or-after/

于 2017-10-27T09:32:09.643 回答
1

如果给定月份低于当前月份,此函数将返回上一年的月份,否则将返回当前年份的月份。

  function getMonthWithPresentOrPastYear(month, format) {
      currentMonth = parseInt(moment().format('M'));
      givenMonth = parseInt(moment().month(month).format('M'));
      format = format || 'YYYY-MM';

      return (givenMonth >= currentMonth) ?
        moment().month(month).format(format) : //  Present
        moment().month(month).subtract(1, 'year').format(format); // Past
    };

    getMonthWithPresentOrPastYear('January'); // returns '2016-01'
    getMonthWithPresentOrPastYear('September'); // returns '2016-09'
    getMonthWithPresentOrPastYear('October'); // returns '2017-10'
    getMonthWithPresentOrPastYear('December', 'YYYY/DD'); // returns '2017/12'
于 2017-10-27T09:32:41.853 回答
0

您可以尝试以下方法:

Object.getPrototypeOf(moment()).getLast = function(month,format="YYYY-MM"){
 var date;
 if(this.diff("01 "+month+" "+this.year()) >= 0 || this.format("MMMM").toLowerCase() === month.toLowerCase)
    date = moment(this).month(month);
  else
    date = moment(this).month(month).subtract(1,"years");
 return date.format(format);
});

在上面的 JavaScript 中,我们检查当前时刻对象中的月份是否已经过去。

这使我们可以直接从任何时刻对象和任何月份进行检查,例如:

var customDate = moment("01 December 2001");
customDate.getLast("September"); //"2001-09"
于 2017-10-27T09:56:46.320 回答