AngularJs: Как сгруппировать данные, основанные на среднем количестве недель за месяц? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть функция, которая отображает данные за 90 дней на графике с использованием библиотеки C3.js. У меня есть даты начала и окончания, определенные на основе переменной count. Есть ли способ, которым я могу сгруппировать данные за 90 дней в зависимости от недели. 1 неделя = 1 точка данных (в среднем 7 дней). 4 недели = 4 точки данных 90 дней = 12 точек данных и т. Д.

function draw__chart(model, type){

    var count = 0

    if(type == 'week'){
        count = 7;
    }else if (type == 'month'){
        dcount = 30;
    }else if (type == '3_months'){
        count = 90; 
    }

    $scope.end_daterange = new Date();
    $scope.end_daterange = moment($scope.end_daterange).format('MM/DD/YYYY')            

    $scope.begin_daterange = new Date($scope.end_daterange);
    $scope.begin_daterange.setDate($scope.begin_daterange.getDate()- count);
    $scope.begin_daterange = moment($scope.begin_daterange).format('MM/DD/YYYY') 


    $date_id = ["date_id"];
    $volume1 = ["volume1"];
    $volume2 = ["volume2"];


    angular.forEach(model, function(value, key) {

        //Date for Chart
        if(dateCheck($scope.begin_daterange,$scope.end_daterange,moment(value.log_date_id).format('MM/DD/YYYY'))){              
            $date_id.push(moment(value.log_date_id).format('MM/DD/YYYY'));
            $volume1.push(value.volume1);
            $volume2.push(value.volume2);

        }

    });

    //Drawing Second Chart
    d3.select("#volume_graph svg").remove();

    setTimeout(function() {

        $scope.volume_id = c3.generate({
            bindto: d3.select('#volume_graph'),
            data: {
                x    : 'date_id',
                columns: [
                    $date_id,

                ],
                },
            },
            axis: {
                x: {
                    type: 'category',
                    tick: {
                        rotate: -90,
                        multiline: false
                    },
                    height: 70
                },
                y: {
                    label: {
                        text: 'Percentage',
                        position: 'outer-middle'
                    }
                },

            },
            tooltip: {
                show: true
            }
        }); 

    }, 100);

};

Функция проверки диапазона дат:

function dateCheck(from,to,check) {

        var fDate,lDate,cDate;
        fDate = Date.parse(from);
        lDate = Date.parse(to);
        cDate = Date.parse(check);

        if((cDate <= lDate && cDate >= fDate)) {
            return true;
        }

        return false;
    };

HTML:

<div id="volume_graph" ng-hide="loading"></div>
...