Возвращение месяца и года из переменной месяца и диапазона месяца-года - PullRequest
4 голосов
/ 26 июня 2019

Я использую jQuery Flot Chart и пытаюсь настроить подсказки по своему вкусу.

Диаграмма, которую я создаю, является диаграммой с накоплением и имеет две накладывающиеся диаграммы с 12 точками или маркерами на каждом линейном графике.

Каждая точка указывает месяц назад на год для каждого графика.

enter image description here

Вероятно, проще описать на картинке. Как отмечается в легенде, светло-голубой - это предыдущие 12 месяцев, а желтым - 12 месяцев до этого.

В любом случае, я запускаю свою собственную пользовательскую переменную yearrange в экземпляре графика, например,

$.plot($(".flot-line"), [{
            label: "Previous Year",
            yearrange: "Jul-2017 - Jun-2018",
            data: previousyear,
            color: "rgb(237,194,64)"
        }, {
            label: "Current Year",
            yearrange: "Jul-2018 - Jun-2019",
            data: currentyear,
            color: "rgb(175,216,248)"
        }]

А затем с помощью этой функции всплывающей подсказки наложить подсказку на каждую точку

$.fn.UseTooltip = function () {
    $(this).bind("plothover", function (event, pos, item) {                         
        if (item) {
            if (previousPoint != item.dataIndex) {
                previousPoint = item.dataIndex;

                $("#tooltip").remove();

                var x = item.datapoint[0];
                var y = item.datapoint[1];                

                var currmonth = months[x-  1];
                var yearrange = item.series.yearrange;

                showTooltip(item.pageX, item.pageY,
                  "<strong> " + y + "</strong> (" + item.series.label + ")");
            }
        }
        else {
            $("#tooltip").remove();
            previousPoint = null;
        }
    });
};

Итак--

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

var currmonth = months[x-  1];

Выводит метку оси X, над которой я нахожу (например, Nov)

var yearrange = item.series.yearrange;

Что выводит из моей вставки пользовательской переменной в flot (например, Jul-2017 - Jun-2018)

Аналогично, например, в текущем году, var currmonth = Jul и var yearrange = Jul-2018 - Jun-2019

У меня вопрос, как я могу создать переменную, которая выводит единственную возможную комбинацию Месяц и Год, учитывая переменные, с которыми я работаю.

Скажите, что мои две переменные Nov и Jul-2017 - Jun-2018. Вывод, который я хочу получить, - единственный ноябрь, который возможен в пределах этих месячных диапазонов - November 2017.

Аналогично, если у меня есть что-то для первого года в текущем месяце, переменная Jul и переменная Jul-2018 - Jun-2019 - единственный июль, который будет соответствовать этому диапазону, будет иметь значение July 2018.

1 Ответ

3 голосов
/ 26 июня 2019

Вы можете начать с этого - я обновил его, чтобы вам не приходилось использовать moment.js, чтобы получить полное имя месяца:

const months = ",January,February,March,April,May,June,July,August,September,October,November,December".split(",")
const monthArr = months.map((month) => month.substring(0,3));
const pad = (num) => ("0"+num).slice(-2);

let getMonthYear = (curMonth,range) => {
  // Note: all string manipulation
  const curMonthStr = pad(monthArr.indexOf(curMonth));
  const [start,end] = range.split(" - ").map(
    d => d.replace(/(\w+)-(\d+)/,(m,a,b) => b+pad(monthArr.indexOf(a)))
  );
  const curYearMonthStart = start.slice(0,-2)+curMonthStr;
  const curYearMonthEnd   = end.slice(0,  -2)+curMonthStr;
  let curYearMonth        = curYearMonthStart;
  if (curYearMonth<start) curYearMonth = curYearMonthEnd; // which one do we take?
  return curYearMonth >= start && curYearMonth <=end ? months[monthArr.indexOf(curMonth)] + " " + curYearMonth.slice(0,-2) : "";
}

const range = "Jun-2018 - Jun-2019";

let curMonth = "Nov";
console.log(
  getMonthYear(curMonth,range)
)  
curMonth = "Jul";
console.log(
  getMonthYear(curMonth,range)
)
...