【问题标题】:Using Datetime as values on X axis in google charts在谷歌图表中使用日期时间作为 X 轴上的值
【发布时间】:2016-04-01 23:08:36
【问题描述】:

我正在使用 MySQL 表中的比特币价格数据和日期时间。出于某种奇怪的原因,它为每个 x 值设置了相同的日期,并且 y 值是倾斜的并且看起来乱序。最近的 Y 值应该是当前价格。这是我用来创建图表的代码:

function drawAxisTickColors() {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'Price');
  data.addColumn('datetime', 'Date');
  var dateArr2 = (<?php echo json_encode($dateArr); ?>).reverse();
    for (i = 0; i < dateArr2.length; i++) {
        dateArr2[i] = dateArr2[i].split(/[- :]/);
      }
  var bitcoinArr = (<?php echo json_encode($bitcoinPriceArr); ?>).reverse();
  console.log(bitcoinArr[0]);
  var length = Math.min(dateArr2.length, bitcoinArr.length);
  var rows = [];
  for (var i = 0; i < length; ++i) {
   rows.push([bitcoinArr[i], new Date(dateArr2[i])]);
  }
    data.addRows(rows);

我认为图表上只使用一个日期的原因与我在 PHP 中使用 javascript 数组 dateArr2 的方式有关。

【问题讨论】:

    标签: javascript php datetime google-visualization


    【解决方案1】:

    来自satoshindex.com页面的修改代码:

    google.load('visualization', '1', {packages: ['corechart', 'line']});
    google.setOnLoadCallback(drawAxisTickColors);
    
    function drawAxisTickColors() {
      var data = new google.visualization.DataTable();
      data.addColumn('number', 'Price');
      data.addColumn('datetime', 'Date');
    
      // var dateArr2 = (<?php echo json_encode($dateArr); ?>).reverse();
      var dateArr2 = (["2015-12-27 23:51:21","2015-12-27 23:51:02","2015-12-27 23:50:41","2015-12-27 23:50:21","2015-12-27 23:50:01","2015-12-27 23:49:41","2015-12-27 23:49:21","2015-12-27 23:49:01","2015-12-27 23:48:41","2015-12-27 23:48:21","2015-12-27 23:48:01","2015-12-27 23:47:41","2015-12-27 23:47:21","2015-12-27 23:47:01","2015-12-27 23:46:42","2015-12-27 23:46:22","2015-12-27 23:46:02","2015-12-27 23:45:41","2015-12-27 23:45:21","2015-12-27 23:45:01","2015-12-27 23:44:41","2015-12-27 23:44:21","2015-12-27 23:44:01","2015-12-27 23:43:41","2015-12-27 23:43:21","2015-12-27 23:43:01","2015-12-27 23:42:41","2015-12-27 23:42:21","2015-12-27 23:42:01","2015-12-27 23:41:41","2015-12-27 23:41:21","2015-12-27 23:41:01","2015-12-27 23:40:41","2015-12-27 23:40:21","2015-12-27 23:40:02","2015-12-27 23:39:41","2015-12-27 23:39:21","2015-12-27 23:39:01","2015-12-27 23:38:41","2015-12-27 23:38:21","2015-12-27 23:38:01","2015-12-27 23:37:41","2015-12-27 23:37:21","2015-12-27 23:37:01","2015-12-27 23:36:41","2015-12-27 23:34:41","2015-12-27 23:36:21","2015-12-27 23:36:01","2015-12-27 23:35:41","2015-12-27 23:35:21"]).reverse();
    
      // var bitcoinArr = (<?php echo json_encode(array_reverse($bitcoinPriceArr)); ?>);
      var bitcoinArr = ([426.61,426.61,426.65,426.65,426.65,426.75,426.63,426.7,426.8,426.76,426.89,426.85,427.02,427.05,426.98,426.99,426.86,426.64,426.65,426.89,426.91,427.18,427.19,427.21,427.26,427.27,427.29,427.26,427.31,427.17,427.21,427.23,427.35,427.34,427.34,427.43,427.47,427.47,427.35,427.5,427.51,427.47,427.48,427.42,427.54,427.54,427.54,427.53,427.57,427.63]);
    
      var length = Math.min(dateArr2.length, bitcoinArr.length);
      var rows = [];
      for (var i = 0; i < length; ++i) {
        rows.push([bitcoinArr[i], new Date(dateArr2[i])]);
      }
    
      data.addRows(rows);
      var options = {
        // backgroundColor: '#E4E4E4',
        curveType: 'function',
        chartArea: {
          left: 0,
          top: 0,
          right: 0,
          bottom: 0,
          width: "100%",
          height: "100%"
        },
        hAxis: {
          textPosition: 'none',
          baselineColor: 'none',
          gridlines: {
            color: 'none'
          },
        },
        vAxis: {
          textPosition: 'none',
          baselineColor: 'none',
          gridlines: {
            color: 'none'
          }
        },
        colors: ['#2098d4', '#ffffff'],
        legend: 'none'
      };
      var container = document.getElementById('chart_div');
      var chart = new google.visualization.LineChart(container);
      chart.draw(data, options);
    }
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    
    <div id="chart_div"></div>

    【讨论】:

    • 未捕获的错误:类型不匹配。值函数 Array() { [native code] } 与列索引 0 中的类型编号不匹配
    • rows[] 不是价格、日期、价格、日期吗?不应该是(价格,日期),(价格,日期)
    • var rows = [ [price, date], [price, date] ]; developers.google.com/chart/interactive/docs/…
    • 请不要拆分日期:dateArr2[i] = dateArr2[i].split(/[- :]/);.
    • 试试这个修复:new Date((dateArr2[i]).replace(/-/g, '/'))。对于 Safari,new Date("2015-12-27 23:51:21") 是无效日期,但 new Date("2015/12/27 23:51:21") 是有效的。
    猜你喜欢
    • 2014-04-22
    • 2010-11-14
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多