Как получить выходные данные по кварталам, например, «FY18 Q1», если ввод предоставлен как «2018.1»? - PullRequest
0 голосов
/ 13 февраля 2019

Существует four quarter i.e. Q1, Q2, Q3 and Q4 для каждого Fiscal Year(FY).Я хочу напечатать:

  • FY18 Q1 для ввода 2018.1
  • FY18 Q2 для ввода 2018.2
  • FY18 Q3 для ввода 2018.3
  • FY18 Q4 для ввода 2018.4

Приведенный ниже код работает нормально, но ищет лучший подход.

controller.GetFormattedQuarter = function (quarter) {
  if (quarter) {
    var newQuarter = String(quarter).replace("20", "FY");
    if (newQuarter.indexOf(".1") != -1) {
      return newQuarter.replace(".1", " Q1");
    }
    if (newQuarter.indexOf(".2") != -1) {
      return newQuarter.replace(".2", " Q2");
    }
    if (newQuarter.indexOf(".3") != -1) {
      return newQuarter.replace(".3", " Q3");
    }
    if (newQuarter.indexOf(".4") != -1) {
      return newQuarter.replace(".4", " Q4");
    }
  }
}

Ответы [ 5 ]

0 голосов
/ 13 февраля 2019

Придерживаясь своего исходного кода, вы можете легко уменьшить количество аналогичных функций с помощью цикла for.Например

controller.GetFormattedQuarter = function (quarter) {
  if (!quarter) {
    return;
  }
  var newQuarter = String(quarter).replace('20', 'FY');
  for (let i = 1; i < 5; i++) {
    let quarterNum = '.' + i;
    if (newQuarter.includes(quarterNum)) {
      return newQuarter.replace(quarterNum, ' Q' + i);
    }
  }
}
0 голосов
/ 13 февраля 2019

Вы можете использовать moment.js 'для анализа и форматирования по вашему желанию

const input = ["2018.1", "2018.2", "2018.3", "2018.4"];

input.forEach(i => console.log(moment(i, "YYYY.[q]Q").format("[FY]YY [Q]Q")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>
0 голосов
/ 13 февраля 2019

Вы можете заменить строку нужными частями.

var input = '2018.1',
    output = input.replace(/^..(..).(.)$/, 'FY$1 Q$2');
    
console.log(output);
0 голосов
/ 13 февраля 2019

Вы можете использовать .substr и .split с уничтожением и литералами шаблона для формирования вашей строки:

const GetFormattedQuarter = quater => 
  (([yr, q]) => `FY${yr.substr(-2)} Q${q}`)(quater.split('.'))
  
console.log(GetFormattedQuarter("2018.1")); // FY18 Q1
console.log(GetFormattedQuarter("2018.2")); // FY18 Q2
console.log(GetFormattedQuarter("2018.3")); // FY18 Q3
console.log(GetFormattedQuarter("2018.4")); // FY18 Q4
0 голосов
/ 13 февраля 2019

Есть несколько способов добиться этого.Можно было бы использовать регулярное выражение:

var arr = ['2018.1', '2018.2', '2018.3', '2018.4'];
arr.forEach(function(q) {
  var output = q.replace(/^\d{2}(\d{2})\.(\d)$/, 'FY$1 Q$2');
  console.log(output);
})

Или вы можете разорвать саму строку:

var arr = ['2018.1', '2018.2', '2018.3', '2018.4'];
arr.forEach(function(input) {
  var parts = input.split('.');
  var year = parts[0].slice(-2);
  var q = parts[1];
  console.log(`FY${year} Q${q}`);
})

Другой способ будет работать с вводом в виде числа:

var arr = ['2018.1', '2018.2', '2018.3', '2018.4'];
arr.forEach(function(input) {
  var year = Math.floor(input);
  var q = Math.round((input - year) * 10);

  var output = `FY${year.toString().slice(-2)} Q${q}`;
  console.log(output);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...