【问题标题】:Chart.JS Time Axis Not ParsingChart.JS 时间轴不解析
【发布时间】:2021-09-04 20:24:35
【问题描述】:

起亚啦!我正在尝试实现 Chart.JS 时间笛卡尔轴。我已经阅读了文档,发现我需要从v3.x.x 添加一个日期时间库和适配器,所以我已经这样做了。

出于某种原因,据我所知,我的所有数据点都准时=0。我认为这就像时间值没有被正确解析。

Chart.js 在内部使用自纪元(1970 年 1 月 1 日午夜,UTC)以来定义为毫秒的时间戳。但是,Chart.js 也支持您选择的日期适配器接受的所有格式。如果你想设置 parsing: false 以获得更好的性能,你应该使用时间戳。

因此,我已将我的 API 配置为返回毫秒时间戳,并在 x 轴选项中定义了 parsing:false

这是一个损坏的 Codepen:https://codepen.io/Finnito/pen/KKqgXez,但代码也附在下面。

document.addEventListener("DOMContentLoaded", function() {
  var weeklyHistoryChartEl = document.getElementById('weeklyHistory').getContext('2d');
  var weeklyHistoryChart = new Chart(weeklyHistoryChartEl, { 
      type: 'line',
      scales: {
        x: {
          type: 'time',
          parsing: false
        }
      }
  });
  weeklyHistoryChart.data = 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}]}');
  weeklyHistoryChart.update();
});
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>

<canvas id="weeklyHistory"></canvas>

【问题讨论】:

    标签: javascript chart.js


    【解决方案1】:

    刻度是选项对象的一部分,如果你把它放在选项中它就可以了:

    document.addEventListener("DOMContentLoaded", function() {
      var weeklyHistoryChartEl = document.getElementById('weeklyHistory').getContext('2d');
      var weeklyHistoryChart = new Chart(weeklyHistoryChartEl, {
        type: 'line',
        options: {
          scales: {
            x: {
              type: 'time',
              parsing: false
            }
          }
        }
      });
      weeklyHistoryChart.data = 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}]}');
      weeklyHistoryChart.update();
    });
    <script src="https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>
    
    <canvas id="weeklyHistory"></canvas>

    https://codepen.io/leelenaleee/pen/MWojOwv

    【讨论】:

    • 该死的,这很有意义。很快,数据中的时间戳是不同周的,而不是同一天的不同时间。你认为那里发生了什么?
    • 他们不是,尝试调用new Date(timeStamp) 并将时间戳替换为来自您的数据点之一的随机时间戳,您将在同一天看到它
    • 嗯,如果我使用epochconverter.com。例如,1625443200 是 2021 年 7 月 5 日星期一凌晨 12:00:00,而 1626048000 是 2021 年 7 月 12 日星期一凌晨 12:00:00。
    • 在控制台中: new Date(1625443200000) Date Mon Jul 05 2021 12:00:00 GMT+1200 (New Zealand Standard Time) new Date(1626048000000) Date Mon Jul 12 2021 12:00 :00 GMT+1200(新西兰标准时间)
    • 啊,哎呀,还有第二个与毫秒的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多