Подтвердить что ты не робот

В Moment.js, как вы получаете текущий финансовый квартал?

Есть ли простой/встроенный способ определения текущего финансового квартала?

Пример:

  • Jan-Mar: 1st
  • Апрель-июль: 2-й
  • Jul-Sept: 3rd
  • Oct-Dec: 4th
4b9b3361

Ответ 1

Теперь это поддерживается в данный момент. Как легко:

moment('2014-12-01').utc().quarter() //outputs 4
moment().quarter(); //outputs current quarter ie. 2

Ответ 2

Используя версию 2.14.1+, вы можете сделать что-то вроде следующего:

moment().quarter() возвращает текущий четвертый номер: 1, 2, 3, 4.

moment().quarter(moment().quarter()).startOf('quarter');

Вернет текущий квартал с датой, установленной на дату начала квартала.

moment().quarter(moment().quarter()).startOf('quarter');

Вернул бы текущий квартал с датой, установленной на дату окончания квартала.

Вы также можете определить функцию, которая принимает соответствующий номер в качестве аргумента (1,2,3,4), и возвращает объект, содержащий дату начала и окончания квартала.

function getQuarterRange(quarter) {

  const start = moment().quarter(quarter).startOf('quarter');

  const end = moment().quarter(quarter).endOf('quarter');

  return {start, end};
}

Ответ 3

Используйте этот простой код, чтобы получить весь квартал, основанный на январь и апрель

Демо

Код:

 // startMonth should be january or april

  function setQuarter(startMonth) {
    var obj = {};
    if(startMonth=='january'){

        obj.quarter1 = {start:moment().month(0).startOf('month'),end:moment().month(2).endOf('month')}
        obj.quarter2 = {start:moment().month(3).startOf('month'),end:moment().month(5).endOf('month')}
        obj.quarter3 = {start:moment().month(6).startOf('month'),end:moment().month(8).endOf('month')}
        obj.quarter4 = {start:moment().month(9).startOf('month'),end:moment().month(11).endOf('month')}
        console.log(obj);
        return obj;
    }
    else if(startMonth=='april'){

        obj.quarter1 = {start:moment().month(3).startOf('month'),end:moment().month(5).endOf('month')}
        obj.quarter2 = {start:moment().month(6).startOf('month'),end:moment().month(8).endOf('month')}
        obj.quarter3 = {start:moment().month(9).startOf('month'),end:moment().month(11).endOf('month')}
        obj.quarter4 = {start:moment().month(0).startOf('month').add('years',1),end:moment().month(2).endOf('month').add('years',1)}
        console.log(obj);
        return obj;
    }
}

 setQuarter('april');

Fiddle

Ответ 4

Я не думаю, что любой из этих ответов объясняет, как получить финансовый квартал. Они объясняют, как получить календарный квартал.

У меня нет чистого ответа, потому что это привело меня сюда. Но финансовый квартал - это то, что действительно нужно. И это основано на начальном месяце финансового года.

Например, если месяц начала работы в моей компании - февраль. Тогда на момент написания этого 9 января 2017 года я на самом деле в четвертом квартале 2016 года.

Для этого нам нужен способ получить квартал относительно поставленного целого числа начального месяца.

Ответ 5

В настоящий момент ничего не создано, но есть разговор, чтобы добавить токены форматирования для кварталов. https://github.com/timrwood/moment/pull/540

Тем временем вы можете использовать что-то вроде следующего.

Math.floor(moment().month() / 3) + 1;

Или, если вы хотите его в прототипе момента, сделайте это.

moment.fn.quarter = function () {
    return Math.floor(this.month() / 3) + 1;
}

Ответ 6

Формула, которая, кажется, работает для меня:

Math.ceil((moment().month() + 1) / 3);

moment(). month() возвращает формат 0-11 месяцев, поэтому мы должны добавить один

THE ACTUAL MONTH = (moment().month() + 1)

то мы должны разделить на 3, так как есть 3 месяца в квартал.

HOW MANY QUARTERS PASSED = (THE ACTUAL MONTH) / 3

и тогда мы должны получить потолок этого (округленный до ближайшего квартала)

CEILING(HOW MANY QUARTERS PASSED)

ИЗМЕНИТЬ:

Официальная формула (еще не объявлена):

~~((this.month()) / 3) + 1;

что означает Math.floor((this.month()) / 3) + 1;

Ответ 7

Простейший способ сделать это -

Math.floor(moment.month() / 3)

Это даст вам индекс на основе нуля. т.е. 0, 1, 2 или 3.

Затем, если вы хотите использовать буквенное число, просто добавьте его.

Ответ 8

Ответ, который дал Нищит Дханани, является правильным, но имеет одну проблему в "апрельском" сценарии.

Вопрос: если ваш финансовый год - апрель, то в течение первых 3 месяцев, т.е. ЯНВ, ФЕВРАЛЬ И МАР

obj.quarter1.start date returns, 1-April-CurrentYear [incorrect Value]
obj.quarter4.end date retunrs, 31-March-NextYear [incorrect Value]

Правильные значения должны быть,

Start = 1-April-PreviuosYear
End = 31-March-CurrentYear

Итак, учитывая первые 3 месяца, можно написать что-то вроде:

    const obj = {};

/* 0-Jan, 1-Feb, 2-Mar */
    if (moment().month() <= 2) { 
        obj.quarter1 = { start: moment().month(3).startOf('month').add('years', -1), end: moment().month(5).endOf('month').add('years', -1) };
        obj.quarter2 = { start: moment().month(6).startOf('month').add('years', -1), end: moment().month(8).endOf('month').add('years', -1) };
        obj.quarter3 = { start: moment().month(9).startOf('month').add('years', -1), end: moment().month(11).endOf('month').add('years', -1) };
        obj.quarter4 = { start: moment().month(0).startOf('month'), end: moment().month(2).endOf('month') };    
    } else {
        obj.quarter1 = { start: moment().month(3).startOf('month'), end: moment().month(5).endOf('month') };
        obj.quarter2 = { start: moment().month(6).startOf('month'), end: moment().month(8).endOf('month') };
        obj.quarter3 = { start: moment().month(9).startOf('month'), end: moment().month(11).endOf('month') };
        obj.quarter4 = { start: moment().month(0).startOf('month').add('years', 1), end: moment().month(2).endOf('month').add('years', 1) };    
    }
    console.log(obj);