Как получить дату прошлого сентября динамически с moment.js

1

Мне нужна дата последнего сентября с moment.js - но динамически.

Текущая дата

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

Как узнать, когда последний сентябрь был с текущей даты? Мне нужно что-то вроде этого:

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

Таким образом, результат теперь будет:

2017-09

Но 3 месяца назад результат был бы другим:

2016-09

Как я могу справиться с этим с помощью функции moment.js?

  • 0
    Является ли month() тем, что вы ищете? Я не совсем понял, что вы пытаетесь сделать. Что вы сами до сих пор пробовали?
  • 0
    month() дает мне текущий месяц. Но мне нужен последний сентябрь как результат. Я пишу заявление, в котором один год начинается в сентябре и заканчивается в сентябре. Поэтому, чтобы получить конкретные данные, мне нужно знать за текущий месяц, какой год был в прошлом сентябре.
Показать ещё 3 комментария
Теги:
angular
ionic3
momentjs
angular2-moment

4 ответа

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/

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
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'
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"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню