You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chart.JS v3.x时间笛卡尔轴毫秒级时间戳无法正确解析问题

问题原因

你代码中返回的是秒级Unix时间戳,不符合Chart.js时间轴要求的毫秒级时间戳规范:你数据中x字段的10位数值(如1625443200)换算为毫秒仅为纪元开始后18天左右,因此所有数据点都会集中在x轴的起始位置。

Chart.js官方文档明确要求:设置parsing: false时,必须传入自1970年1月1日UTC零点起算的毫秒级时间戳。

解决方案

方案1:保持高性能配置(推荐)

保留parsing: false配置,仅需要在数据赋值前将所有x字段的时间戳转换为毫秒级即可,修改后的JS代码如下:

document.addEventListener("DOMContentLoaded", function() {
  var weeklyHistoryChartEl = document.getElementById('weeklyHistory').getContext('2d');
  var weeklyHistoryChart = new Chart(weeklyHistoryChartEl, { 
      type: 'line',
      scales: {
        x: {
          type: 'time',
          parsing: false
        }
      }
  });
  let rawData = JSON.parse('{"datasets":[{"data":[{"x":1625443200,"y":11.74},{"x":1626048000,"y":12.43},{"x":1626652800,"y":34.18}],"label":"Hike","hidden":true},{"data":[{"x":1624233600,"y":5.27},{"x":1630281600,"y":7.32}],"label":"Kayaking","hidden":true},{"data":[{"x":1626652800,"y":17.99}],"label":"NordicSki","hidden":true},{"data":[{"x":1623024000,"y":9.98},{"x":1623628800,"y":15.97},{"x":1624233600,"y":29.07},{"x":1624838400,"y":57.26},{"x":1625443200,"y":15.87},{"x":1627257600,"y":40.73},{"x":1627862400,"y":29.87},{"x":1628467200,"y":58.87},{"x":1629072000,"y":7.62},{"x":1629676800,"y":21.52},{"x":1630281600,"y":6.03}],"label":"Ride","hidden":true},{"data":[{"x":1628467200,"y":0}],"label":"RockClimbing","hidden":true},{"data":[{"x":1623628800,"y":92.45},{"x":1624233600,"y":31.24},{"x":1624838400,"y":23.81},{"x":1625443200,"y":9.39},{"x":1626048000,"y":40.94},{"x":1626652800,"y":12.84},{"x":1627257600,"y":33.59},{"x":1627862400,"y":30.97},{"x":1628467200,"y":31.88},{"x":1629072000,"y":27.88},{"x":1629676800,"y":47.23},{"x":1630281600,"y":48.1}],"label":"Run","hidden":false},{"data":[{"x":1627862400,"y":30.2},{"x":1628467200,"y":36.24},{"x":1629676800,"y":85.58},{"x":1630281600,"y":52.81}],"label":"VirtualRide","hidden":true},{"data":[{"x":1623024000,"y":6.78},{"x":1626048000,"y":5.92}],"label":"Walk","hidden":true},{"data":[{"x":1623628800,"y":0},{"x":1628467200,"y":0}],"label":"Yoga","hidden":true}]}');
  // 转换秒级时间戳为毫秒级
  rawData.datasets.forEach(dataset => {
    dataset.data.forEach(item => {
      item.x = item.x * 1000;
    })
  })
  weeklyHistoryChart.data = rawData;
  weeklyHistoryChart.update();
});

方案2:无需修改原始数据

移除parsing: false配置,让日期适配器自动识别并转换秒级时间戳即可,无需额外调整其他代码。

额外注意事项

你当前引入的date-fns版本为v1.30.1,部分新版chartjs-adapter-date-fns对date-fns的最低版本要求为v2.0.0,若转换时间戳后仍有适配问题,可将date-fns的引入地址替换为v2以上版本即可。


内容的提问来源于stack exchange,提问作者Finn LeSueur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:09:01