javascript - 如何在 Charts.js 3.x 中将 "hh:mm:ss"字符串解析为时间

标签 javascript html chart.js

我想使用 Charts.js 创建时间轴。 为此,我以小时:分钟:秒的格式导入数据,如“00:00:10”。
当使用 Charts.js 2.0 时,可以设置解析器,允许将时间值作为字符串导入。

但在升级到 Charts.js 3.2.1 之后,解析器选项似乎不再有效。
在文档中指出,仍然可以像以前一样使用解析器。 https://www.chartjs.org/docs/latest/axes/cartesian/time.html#parser

我找到了多个解释如何执行此操作的论坛线程,但它们是在 Charts.js 2.x 中完成的,不再适用于我的示例。
Plot lap times with Chart.js from time strings
Chartjs time in Xaxes

这是我的代码。
第一个示例无法运行,因为脚本解析器失败。在第二个示例中,您可以看到完全相同的代码,但没有正在运行的解析器。

那么我如何解析我的字符串数据,以便它的格式正确并显示时间线?

非常感谢您的帮助。

var ctx = document.getElementById('chart').getContext('2d');
var myChart = new Chart(ctx, {
    type: 'line',
    data: {
        datasets: [
            {
            label: "Switched",
            data: [{x:"00:00:07", y: 0}, {x:"00:00:14", y: 0}, {x:"00:05:24", y: 0}],
            showLine: false,
            fill: false,
            tooltip: "Player switched",
            borderColor: "#16a085",
            backgroundColor: "#16a085"
        }
    ]},
    options: {
        responsive: true,
        scales: {
        x: {
                type: 'time',
                time: {
                    parser: 'HH:mm:ss',
                    unit: "seconds",
                    tooltipFormat: 'HH:mm:ss',
                    displayFormats: {
                        'seconds': "HH:mm:ss"
                    },
                    unitStepSize: 30
                }
            },
            y: {
                min: -1,
                max: 13,
                stepSize: 1,
            }
        }
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.2.1/chart.min.js"></script>

<canvas id="chart" height= "80px" style="background-color: rgb(50, 50, 50);"></canvas>

var ctx = document.getElementById('chart').getContext('2d');
var myChart = new Chart(ctx, {
    type: 'line',
    data: {
        datasets: [
            {
            label: "Switched",
            data: [{x:"00:00:07", y: 0}, {x:"00:00:14", y: 0}, {x:"00:05:24", y: 0}],
            showLine: false,
            fill: false,
            tooltip: "Player switched",
            borderColor: "#16a085",
            backgroundColor: "#16a085"
        }
    ]},
    options: {
        responsive: true,
        scales: {
        x: {},
            y: {
                min: -1,
                max: 13,
                stepSize: 1,
            }
        }
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.2.1/chart.min.js"></script>

<canvas id="chart" height= "80px" style="background-color: rgb(50, 50, 50);"></canvas>

最佳答案

在 chart.js v3 中,他们删除了 moment 和适配器,因此您需要将两者都添加到您的脚本中,它应该可以工作

例子:

var ctx = document.getElementById('chart').getContext('2d');
var myChart = new Chart(ctx, {
    type: 'line',
    data: {
        datasets: [
            {
            label: "Switched",
            data: [{x:"00:00:07", y: 0}, {x:"00:00:14", y: 0}, {x:"00:05:24", y: 0}],
            showLine: false,
            fill: false,
            tooltip: "Player switched",
            borderColor: "#16a085",
            backgroundColor: "#16a085"
        }
    ]},
    options: {
        responsive: true,
        scales: {
        x: {
                type: 'time',
                time: {
                    parser: 'HH:mm:ss',
                    unit: "seconds",
                    tooltipFormat: 'HH:mm:ss',
                    displayFormats: {
                        'seconds': "HH:mm:ss"
                    },
                    unitStepSize: 30
                }
            },
            y: {
                min: -1,
                max: 13,
                stepSize: 1,
            }
        }
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment@0.1.1"></script>

<canvas id="chart" height= "80px" style="background-color: rgb(50, 50, 50);"></canvas>

关于javascript - 如何在 Charts.js 3.x 中将 "hh:mm:ss"字符串解析为时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67613040/

相关文章:

javascript - 为模板动态打包css & js

javascript - 为什么我的 Javascript for 循环不循环?

javascript - 将 javascript 确认框中的文本显示为粗体字母

html - 添加填充时如何在 div 宽度和高度上调整内容,不让滚动条出现

javascript - Primevue图表未呈现

javascript - ChartJS 将字符串中的日期视为数字

javascript - 谁真正在 Web 浏览器中执行 HTTP 请求?

html - 三个 div 的一个总是在中心

angular - 使用 Chartjs Angular 按值排序和隐藏图例项

javascript - Angular 路由中的哈希符号