【问题标题】:x-Axis not working because I'm not using correctly moment.jsx 轴不工作,因为我没有正确使用 moment.js
【发布时间】:2020-01-13 23:25:19
【问题描述】:

我正在尝试绘制一些信息,我的x-axis 是时间。对于我正在使用的这个目标,chart.jsmoment.js 但我在将这个时间转换为标签时遇到了一些问题。

我的代码是:

var sData = {
    datasets: [{
        label: 'Dataset1',
        data: [{ x: '09:00', y: 88 }, { x: '09:10', y: 89 }, { x: '09:13', y: 86 }, { x: '09:23', y: 86 },
            { x: '09:26', y: 85}, { x: '09:29', y: 83 }]
        }, {
        label: 'Dataset2',
        data: [{ x: '09:02', y: 88 }, { x: '09:13', y: 89 }, { x: '09:14', y: 86 }, { x: '09:20', y: 86 },
            { x: '09:24', y: 85 }, { x: '09:29', y: 83 }]
    }]
}

sData.datasets[0].data = formatData(sData.datasets[0].data)
sData.datasets[1].data = formatData(sData.datasets[1].data)

function formatData(oldData) {
    var newData = []
    for (var i = 0; i < oldData.length; i++) {
        var currentData = {}
        currentData.x = moment(oldData[i].x, "HH:mm").format('HH:mm')
        currentData.y = oldData[i].y
        newData.push(currentData)
    }
    return newData
  }

var data = sData

var options = {
    responsive: true,
    scales: {
        xAxes: [{
            type: 'time',
        }]
    },
    tooltips: {
        callbacks: {
            title: function(tooltipItem, data){
                return moment(tooltipItem[0].label).format('HH:mm')
            }
        }
    }
}

var ctx = document.getElementById('bateria_graf');
let chart = new Chart(ctx, {
    type: 'line',
    data: data,
    options: options
});

我认为问题在于我没有正确格式化时间,但我不知道如何解决它。有人可以帮帮我吗?

非常感谢!

【问题讨论】:

    标签: javascript chart.js momentjs


    【解决方案1】:

    问题出在您的formatData 函数中。使用moment,您可以正确解析时间,但随后您将format 恢复为原来的string 值。解决方法是不再调用format

    currentData.x = moment(oldData[i].x, "HH:mm");
    

    还有整件事:

    var sData = {
        datasets: [{
            label: 'Dataset1',
            data: [{ x: '09:00', y: 88 }, { x: '09:10', y: 89 }, { x: '09:13', y: 86 }, { x: '09:23', y: 86 },
                { x: '09:26', y: 85}, { x: '09:29', y: 83 }]
            }, {
            label: 'Dataset2',
            data: [{ x: '09:02', y: 88 }, { x: '09:13', y: 89 }, { x: '09:14', y: 86 }, { x: '09:20', y: 86 },
                { x: '09:24', y: 85 }, { x: '09:29', y: 83 }]
        }]
    }
    
    sData.datasets[0].data = formatData(sData.datasets[0].data)
    sData.datasets[1].data = formatData(sData.datasets[1].data)
    
    function formatData(oldData) {
        var newData = []
        for (var i = 0; i < oldData.length; i++) {
            var currentData = {}
            currentData.x = moment(oldData[i].x, "HH:mm")
            currentData.y = oldData[i].y
            newData.push(currentData)
        }
        return newData
    }
    
    var options = {
        responsive: true,
        scales: {
            xAxes: [{
                type: 'time',
            }]
        },
        tooltips: {
            callbacks: {
                title: (tooltipItem, data) => moment(tooltipItem[0].label).format('HH:mm')            
            }
        }
    }
    
    var ctx = document.getElementById('bateria_graf').getContext('2d');
    let chart = new Chart(ctx, {
        type: 'line',
        data: sData,
        options: options
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.1.0/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
    <canvas id="bateria_graf"></canvas>

    【讨论】:

    • 非常感谢!!!我还有一个问题(我在帖子中添加了因为它更干净),如果您能回答,我将不胜感激。基本上是,为什么它在x-axis 中显示今天的日期?再次感谢您!
    • @NEA:接受我的回答并发布一个带有可运行代码 sn-p 的新问题会更清晰。这样可以更轻松地提供简洁的答案。
    • 好的,我做。对不起:)
    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 2019-08-02
    • 1970-01-01
    • 2017-12-08
    • 2021-06-11
    • 2021-12-14
    • 1970-01-01
    • 2016-08-09
    相关资源
    最近更新 更多