【问题标题】:Date range picker and chart js日期范围选择器和图表 js
【发布时间】:2019-03-29 23:30:59
【问题描述】:

我想根据我的日期范围选择器更改图表 js 上的 x 轴标签。如果我选​​择本周,那么 x 轴标签应该从星期日开始到星期六。如果我选择这个月,那么 x 轴标签应该从 10 月 1 日开始...... 10 月 30 日。如果我选​​择上个月,那么应该是 9 月 1 日...... 9 月 30 日。 如果我选择日期范围,那么它应该从开始月份到结束月份。

直到现在我尝试过这个,但我确定。太垃圾了。

$('#report-overview-range').on('apply.daterangepicker', function(ev, picker) {
      let startDate = picker.startDate.format('YYYY-MM-DD');
      let endDate = picker.endDate.format('YYYY-MM-DD');
      let date= startDate+'&'+endDate;
      $(this).attr('date', date);  
      let today = moment().format('YYYY-MM-DD');
      let dateDiff = moment(today).diff(moment(startDate), 'days');
      /*If date difference is a 6 then its a week 
        if date difference is greater than 31 then its a */       
    });

【问题讨论】:

    标签: javascript charts chart.js daterangepicker chartjs-2.6.0


    【解决方案1】:

    您可以这样做的一种方法是动态分配要从中获取数据的端点。

    $('#report-overview-range').on('apply.daterangepicker', function (ev, picker) {
        let startDate = picker.startDate.format('YYYY-MM-DD');
        let endDate = picker.endDate.format('YYYY-MM-DD');
        let date = startDate + '&' + endDate;
        $(this).attr('date', date);
        let today = moment().format('YYYY-MM-DD');
        let dateDiff = moment(today).diff(moment(startDate), 'days');
        if (dateDiff < 6) {
            dataEndpoint = "weekRange.php?" + date;
            title = "Week View";
        } else {
            dataEndpoint = "monthRange.php?" + date;
            title = "Month View";
        }
    
        // assign a reference to the chart in the dom
        let chartRef = document.getElementById("chart-id-goes-here").getContext('2d');
    
        $.ajax({
            url: dataEndpoint,
            dataType: 'json',
            success: function (graphData) {
                new Chart(chartRef, {
                    type: 'bar',
                    data: {
                        labels: Object.keys(graphData),
                        datasets: [{
                            label: title,
                            data: Object.values(graphData),
                        }] //end datasets
                    }, //end data
                    options: {
                        scales: {
                            yAxes: [{
                                ticks: {
                                    beginAtZero: true
                                }
                            }]
                        }
                    }
                });
            }
        })
    });
    

    在此示例中,有一个 if 语句可以更改变量 dataEndpoint。我正在对您获取数据的方式做出一些假设,但该策略通常应该有效。

    如果您将 x 轴映射到键并将 y 轴映射到对,它将分别使用 Object.keys(graphData)Object.values(graphData) 正确填充表格。这是 weekRange.php 的示例返回(我将其扔到现有项目中,这对 CSS 有一点影响):

    {
        "Sun":"41454.33",
        "Mon":"17546.34",
        "Tue":"12558.60",
        "Wed":"25757.79",
        "Thur":"26119.51",
        "Fri":"21195.63",
        "Sat":"20528.79"
    }
    

    填充后的图表:

    这是monthRange.php返回的一些垃圾数据:

    {
        "1": "880.33",
        "2": "387.77",
        "3": "1056.54",
        "4": "48.58",
        "5": "1107.97",
        "6": "852.45",
        "7": "534.34",
        "8": "349.77",
        "9": "324.77",
        "10": "464.51",
        "11": "1135.88",
        "12": "514.75",
        "13": "278.85",
        "14": "176.22",
        "15": "167.96",
        "16": "424.49",
        "17": "1123.37",
        "18": "469.74",
        "19": "1844.47",
        "20": "346.86",
        "21": "424.05",
        "22": "664.59",
        "23": "985.48",
        "24": "1288.77",
        "25": "821.07",
        "26": "969.48",
        "27": "814.52",
        "28": "164.76",
        "29": "184.77",
        "30": "1730.73",
        "31": "657.75"
    }
    

    以下是这些数据在同一张图表上的样子:

    我不确定dateDiff 在这个逻辑中,我认为你可能需要重新设计它以返回一个整数。

    【讨论】:

    • 好的,我稍后会查看。看起来很有帮助。但是你能帮我解决这个问题吗?...我无法删除 ajax 上的所有标签和数据。我使用了文档中给出的功能,但没有用。它只弹出一个标签和一个数据。我想删除所有标签和数据并创建新的
    • 如果您发布更多代码,我们可以一起处理。我需要看看你正在使用的数据,你的数据结构会影响你的逻辑。
    猜你喜欢
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多