叶子最近在做图表的时候遇到一个问题。挣扎了很久。。。最后的最后才破案。。。 下面直接上代码:

后端代码:

//>计算起止时间相差月份
$month = $this->count_month($start_time,$end_time);
$pay_date = [];
for($i=0;$i结尾月份固定为$end_time
$pay_date[] = (string)date('Y-m',strtotime($end_time));

这样返回到前端后格式如下:

这样看来。后端返回数据就正常了。我们来看前端。。。下面第一个版本:

<canvas id="linePay" style="width:200px;height:50px;"></canvas>

    $(function () {
        var ctx = document.getElementById("linePay").getContext('2d');
        var smmyChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels:[
                    @foreach($pay_dates as $v)
                    {{$v}},
                    @endforeach
                ],
                datasets: [{
                    label: "收费金额",
                    data: [
                        @foreach($sum_pay as $v)
                        {{$v}},
                        @endforeach
                    ],
                    backgroundColor: 'rgba(255, 99, 132, 0.2)',
                    borderColor: 'rgba(255,99,132,1)',
                    borderWidth: 1
                },
                ]
            },
            options: {
                barPercentage: 1.0,
                categoryPercentage: 1.0,
                legend:false,
                title: {
                    display: false,
                    text: '月收费金额'
                },
                tooltips: {
                    mode: 'index',
                    intersect: false
                },
                responsive: true,
                scales: {
                    xAxes: [{
                        beginAtZero: true,
                    }],
                    yAxes: [{
                        ticks:{
                            min:0,
                            beginAtZero: true
                        },
                    }]
                }
            }
        });
    });

这样运行下来。chartjs直接把labels里的年-月当成了减法运算。。。导致了: 接下来一番折腾。是第二版本:

<canvas id="linePay" style="width:200px;height:50px;"></canvas>

    $(function () {
        var ctx = document.getElementById("linePay").getContext('2d');
        var smmyChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels:[
                    @foreach($pay_dates as $v)
                    {{(string)$v}},
                    @endforeach
                ],
                datasets: [{
                    label: "收费金额",
                    data: [
                        @foreach($sum_pay as $v)
                        {{$v}},
                        @endforeach
                    ],
                    backgroundColor: 'rgba(255, 99, 132, 0.2)',
                    borderColor: 'rgba(255,99,132,1)',
                    borderWidth: 1
                },
                ]
            },
            options: {
                barPercentage: 1.0,
                categoryPercentage: 1.0,
                legend:false,
                title: {
                    display: false,
                    text: '月收费金额'
                },
                tooltips: {
                    mode: 'index',
                    intersect: false
                },
                responsive: true,
                scales: {
                    xAxes: [{
                        beginAtZero: true,
                    }],
                    yAxes: [{
                        ticks:{
                            min:0,
                            beginAtZero: true
                        },
                    }]
                }
            }
        });
    });

以为强制string后可以达到效果。。。结果真的是然并卵。。。最后的最后。。。才突然想起是不是混编不识别这个东西。。。所以有了第三个版本:

<canvas id="linePay" style="width:200px;height:50px;"></canvas>

    $(function () {
        var ctx = document.getElementById("linePay").getContext('2d');
        var smmyChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels:[
                    @foreach($pay_dates as $v)
                    "{{$v}}",
                    @endforeach
                ],
                datasets: [{
                    label: "收费金额",
                    data: [
                        @foreach($sum_pay as $v)
                        {{$v}},
                        @endforeach
                    ],
                    backgroundColor: 'rgba(255, 99, 132, 0.2)',
                    borderColor: 'rgba(255,99,132,1)',
                    borderWidth: 1
                },
                ]
            },
            options: {
                barPercentage: 1.0,
                categoryPercentage: 1.0,
                legend:false,
                title: {
                    display: false,
                    text: '月收费金额'
                },
                tooltips: {
                    mode: 'index',
                    intersect: false
                },
                responsive: true,
                scales: {
                    xAxes: [{
                        beginAtZero: true,
                    }],
                    yAxes: [{
                        ticks:{
                            min:0,
                            beginAtZero: true
                        },
                    }]
                }
            }
        });
    });

运行后:

至此排除问题→_→

真真是轮引号的重要性。。。