【问题标题】:Google Chart Api make use of datetime valueGoogle Chart Api 利用日期时间值
【发布时间】:2015-07-07 17:37:45
【问题描述】:

您好,我想在我的图表中显示日期时间,我在堆栈中进行了一些搜索,发现类似this 的问题,但我不明白如何解决这个问题。

我认为我应该更改的代码部分如下..

<?php

$DB_NAME = 'project';


$DB_HOST = 'localhost';


$DB_USER = 'root';
$DB_PASS = 'smogi';

include_once 'header.php';

$view = ($_GET['view']);
$username2 =$_SESSION['username'];
$firstDate= $_POST['firstdatepicker']; 
$lastDate= $_POST['lastdatepicker'];
$typeValue = ($_POST['typeValue']);
$startHour = ($_POST['startHour']);
$firstMin = ($_POST['firstMin']);
$lastHour = ($_POST['lastHour']);
$lastMin = ($_POST['lastMin']);

$firstTime = $startHour.':'.$firstMin.':00';
$lastTime = $lastHour.':'.$lastMin.':00';

$con = mysqli_connect('localhost','root','smogi','project');

  /* Establish the database connection */
  $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);

  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
  }

 $sql="SELECT sensorValue,datetime FROM sensors WHERE username='$view' AND datetime BETWEEN '$firstDate''$firstTime' AND '$lastDate''$lastTime' AND typeValue='$typeValue' ORDER BY datetime DESC";
 $result = mysqli_query($con,$sql);




  $rows = array();
  $table = array();
  $table['cols'] = array(

    // Labels for your chart, these represent the column titles.

    array('label' => 'Date Time', 'type' => 'date'),
    array('label' => 'Sensor Value', 'type' => 'number')

);
    /* Extract the information from $result */
    foreach($result as $r) {

      $temp = array();

      // The following line will be used to slice the  chart

      $temp[] = array('v' => 'Date('.date('Y',strtotime($r['datetime'])).','.(date('n',strtotime($r['datetime'])) - 1).','.date('d',strtotime($r['datetime'])).',0,0,0)'); 

      // Values of the each slice

      $temp[] = array('v' => (int) $r['sensorValue']); 
      $rows[] = array('c' => $temp);
    }

$table['rows'] = $rows;

// convert data into JSON format
$jsonTable = json_encode($table);
//echo $jsonTable;


?>


<html>
  <head>
    <!--Load the Ajax API-->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.load('visualization', '1', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawChart);

    function drawChart() {

      // Create our data table out of JSON data loaded from server.
      var data = new google.visualization.DataTable(<?=$jsonTable?>);
      var options = {
          hAxis: {title: 'Date & Time'},
          vAxis: {title: 'Sensor Values'},
           title: 'Sensor Data',
          is3D: 'true',
          width: 900,
          height: 600
        };
      // Instantiate and draw our chart, passing in some options.
      var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));
      chart.draw(data, options);
    }
    </script>
  </head>

  <body>
    <!--this is the div that will hold the pie chart-->
    <div id="chart_div"></div>
  </body>
</html>

我现在的图表是这样的......

我想要的是而不是 1000,2000...5000 来显示我正在显示的数据中的日期时间。

包含日期时间的我的数据库表如下...

你能帮帮我吗??? :)

【问题讨论】:

    标签: php mysql json google-api google-visualization


    【解决方案1】:

    我刚刚尝试了以下代码:

    <?php
     $rows = array();
      $table = array();
      $table['cols'] = array(
    
        // Labels for your chart, these represent the column titles.
    
        array('label' => 'Date Time', 'type' => 'date'),
        array('label' => 'Sensor Value', 'type' => 'number'),
        array('type' => 'string', 'role' => 'tooltip', 'p' => array('html' => 'true')),
    );
    
    $result = array(
        array('datetime' => '2015-04-25 00:00:00', 'sensorValue' => 5),
        array('datetime' => '2015-04-25 14:30:00', 'sensorValue' => 10),
        array('datetime' => '2015-04-26 02:10:10', 'sensorValue' => 15),
        array('datetime' => '2015-04-26 12:10:10', 'sensorValue' => 17),
        array('datetime' => '2015-04-27 03:45:23', 'sensorValue' => 25),
        array('datetime' => '2015-04-28 15:34:00', 'sensorValue' => 4),
    );
    
        /* Extract the information from $result */
        foreach($result as $r) {
    
          $temp = array();
    
          // The following line will be used to slice the chart
    
          $temp[] = array('v' => 'Date('.date('Y',strtotime($r['datetime'])).',' . 
                                         (date('n',strtotime($r['datetime'])) - 1).','.
                                         date('d',strtotime($r['datetime'])).','.
                                         date('H',strtotime($r['datetime'])).','.
                                         date('i',strtotime($r['datetime'])).','.
                                         date('s',strtotime($r['datetime'])).')'); 
    
          // Values of the each slice
    
          $temp[] = array('v' => (int) $r['sensorValue']); 
          $temp[] = array('v' => 'This is a <b>custom</b> tooltip. Insert your data as you like: On the 25th of April, 2015 the sensor value was: <b>5</b>');
          $rows[] = array('c' => $temp);
        }
    
    $table['rows'] = $rows;
    // convert data into JSON format
    $jsonTable = json_encode($table);
    ?>
    
    
      <html>
      <head>
        <script type="text/javascript"
              src="https://www.google.com/jsapi?autoload={
                'modules':[{
                  'name':'visualization',
                  'version':'1',
                  'packages':['corechart']
                }]
              }"></script>
    
        <script type="text/javascript">
          google.setOnLoadCallback(drawChart);
    
          function drawChart() {
            var data = new google.visualization.DataTable(<?php echo $jsonTable; ?>);
    
            var options = {
              title: 'Company Performance',
              curveType: 'function',
              legend: { position: 'bottom' },
              tooltip: {isHtml: true}
            };
    
            var chart = new google.visualization.ScatterChart(document.getElementById('curve_chart'));
    
            chart.draw(data, options);
          }
        </script>
      </head>
      <body>
        <div id="curve_chart" style="width: 900px; height: 500px"></div>
      </body>
    </html>
    

    所以我改变了:

    1. array('label' =&gt; 'Date Time', 'type' =&gt; 'number')array('label' =&gt; 'Date Time', 'type' =&gt; 'date')
    2. 'Date(date("Y"),date("n") - 1,date("d"),0,0,0)' 形成日期,如here 所述

    这是工具提示中带有 html 的结果:

    更新

    如果您想要自定义工具提示,here 就是它的文档。见上面更新的代码,自定义tooltips需要做三处修改:

    1. 将“虚拟”列添加到列列表中(角色 = 工具提示):

      array('type' =&gt; 'string', 'role' =&gt; 'tooltip', 'p' =&gt; array('html' =&gt; 'true')),

    2. 在循环中为列添加值:

      $temp[] = array('v' =&gt; 'This is a &lt;b&gt;custom&lt;/b&gt; tooltip. Insert your data as you like: On the 25th of April, 2015 the sensor value was: &lt;b&gt;5&lt;/b&gt;');

    3. 并让jsapi知道内容是html:

      var options = {
        ...
        tooltip: {isHtml: true}
      };
      

    更新

    要自定义横轴值,需要先查看this。只需将hAxis 对象(及其format)添加到图表选项对象:

        var options = {
          ...
          hAxis: {
            format: 'yyyy-M-d'
          }
        };
    

    你会看到类似的东西:

    【讨论】:

    • 首先感谢您的宝贵时间,但我希望它是散点图:-/
    • 时间(小时、分钟、秒)呢?如果你想检查更新的代码
    • 我随时间更新了我的答案。抱歉,我硬编码了时间/日期值,没有心情创建测试 mysql 表并在那里插入值。希望您理解 Date() 构造函数在 JSON 数据中返回的想法和主要内容
    • 是的,谢谢,我寻找了类似的解决方案,但无法成功。最后一件事,如果你想看,我们可以增加盒子的大小(prntscr.com/6zaa6o),让它也显示时间吗?
    • 只需将日期和时间用作文本,就像您将其注入文本或 html 中一样。同样,这只是 text/html,它不会被 JSAPI 解释
    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多