Google Charts&MySQL Timestamp处理问题

时间:2018-08-03 22:26:15

标签: php mysql google-visualization

我有一个登录MySQL数据库的设备,我想从中读取几百行,并使用它创建一个Google图表。

我似乎找不到一种将MySQL时间戳数据转换为Google图表数据数组的timeofday列类型的好方法。

https://developers.google.com/chart/interactive/docs/datesandtimes

我已经开发了一个PHP,该PHP可以回显我希望的数据,但是我仍然使用MySQL或Unix时间戳格式。 PHP文件:

<?php 
            $mysqli = new mysqli("localhost", "readuser", "***", "***");
            /* check connection */
            if ($mysqli->connect_errno) {
                printf("Connect failed: %s\n", $mysqli->connect_error);
                exit();
            }
            /* Select queries return a resultset */
            if ($result = $mysqli->query("SELECT ID, Timestamp, temp FROM temperature ORDER BY ID DESC LIMIT 5")) {
                while($row = mysqli_fetch_assoc($result))
                {
                $dataset1[] = array($row['Timestamp'],$row['temp']);
                }

            /* encode array to JSON for JavaScript */
            echo json_encode($dataset1); 


            /* free result set */
            $result->close();
            }

        ?> 

上述php执行示例:

[
["2018-08-03 17:01:33","80.60"],
["2018-08-03 17:01:23","81.05"],
["2018-08-03 17:01:13","80.60"],
["2018-08-03 17:01:03","81.05"],
["2018-08-03 17:00:53","81.05"]
]

我认为Google图表希望看到的更像是

[
[[17, 01, 33],80.60],
[[17, 01, 23],81.05],
[[17, 01, 13],80.60],
[[17, 01, 03],81.50],
[[17, 00, 50],81.05]
]

这是数据将要进入的主要PHP文件(用ajax访问json数据php文件,并在setInterval处更新图表绘制):

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript"> 
      google.charts.load('current', {'packages':['line']});
      google.charts.setOnLoadCallback(drawChart);

      /* declare variable for json data */
    var chardata;
    /* ajax to pull mysql data via php file */
    function chartdataquery() {
        jQuery.ajax({
            url:'/mysql/chartdata.php',
            type:'POST',
            async: false,
            dataType: 'json',
            success:function (results) {
                chartdata = (results);
                } 
            });
         };
    /* Set the chartdata update frequency */
    updatequeryInterval = setInterval(chartdataquery,10000);

/* drawing the chart at the setInterval duration, at the end of the function */
    function drawChart() {

      var data = new google.visualization.DataTable();
      data.addColumn('timeofday', 'Time');
      data.addColumn('number', 'Temperature');

      data.addRows(chartdata);

      var options = {
        chart: {
          title: 'Temperature',
          subtitle: 'updated every 10 seconds'
        },
        width: 900,
        height: 500
      };

      var chart = new google.charts.Line(document.getElementById('linechart_material'));


      chart.draw(data, google.charts.Line.convertOptions(options));
    }

    </script>
  </head>
  <body>
    <div id="linechart_material" style="width: 900px; height: 500px"></div>
  </body>
</html>

这是正确的吗,我可以使用MySQL查询或PHP或Javascript完成某些操作吗?我要使阵列的Google图表在一天中的时间符合我的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试像这样加载php数组...

while($row = mysqli_fetch_assoc($result))
{
  $dataset1[] = array(array((int) date_format(new DateTime($row['Timestamp']), 'H'), (int) date_format(new DateTime($row['Timestamp']), 'i'), (int) date_format(new DateTime($row['Timestamp']), 's')),$row['temp']);
}

要使上述方法生效,您需要将google列类型更改为...

data.addColumn('timeofday', 'Time');

答案 1 :(得分:-1)

您应该能够使用$timestamp->format("")重新格式化PHP中从SQL接收的时间戳。 在前缀中,您可以输入参数,我不知道所有这些参数,但是: Y年 m个月 d天

然后在参数之间使用一些空格,例如 $timestamp->format("Y m d")应该输出类似以下内容: “ [2018 08 04]”