Я работаю над экспериментом диаграммы google. Раньше у меня была проблема с отображением даты со временем по оси х. И пользователь дал мне этот пример в jsbin: http://jsbin.com/yaqew/1/edit, где у вас есть возможность видеть дату и время для каждой из точек. Проблема, с которой я столкнулся, заключалась в том, чтобы реализовать это в моем решении:
Phpcode:
<?php $con=mysql_connect("localhost","root","") or die("Failed to connect with database!!!!"); mysql_select_db("chart", $con); $sth = mysql_query("SELECT * FROM googlechart"); $rows = array(); //flag is not needed $flag = true; $table = array(); $table['cols'] = array( array('label' => 'Time', 'type' => 'date'), array('label' => 'Date', 'type' => 'date'), array('label' => 'PH', 'type' => 'number'), array('label' => 'temperature','type' => 'number'), array('label' => 'Chlorine','type' => 'number'), ); $rows = array(); while($r = mysql_fetch_assoc($sth)) { // assumes dates are in the format "yyyy-MM-dd" $dateString = $r['Date']; $dateArray = explode('-', $dateString); $year = $dateArray[0]; $month = $dateArray[1] - 1; // subtract 1 to convert to javascript's 0-indexed months $day = $dateArray[2]; // assumes time is in the format "hh:mm:ss" $timeString = $r['Time']; $timeArray = explode(':', $timeString); $hours = $timeArray[0]; $minutes = $timeArray[1]; $seconds = $timeArray[2]; echo $dateString."<br>"; echo $timeString."<br>"; $temp = array(); $temp[] = array('v' => "Date($year, $month, $day, $hours, $minutes, $seconds)"); $temp[] = array('v' => (string) $r['PH']); $temp[] = array('v' => (string) $r['temperature']); $temp[] = array('v' => (string) $r['Chlorine']); $rows[] = array('c' => $temp); } $table['rows'] = $rows; $jsonTable = json_encode($table); echo $jsonTable;
HTML / JavaScript:
<html> <head> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("visualization", "1", {packages:["corechart"]}); google.setOnLoadCallback(drawChart); function drawChart() { var data = new google.visualization.DataTable(<?=$jsonTable?>); var options = { /*width: 900, height: 900, */ title: 'Visualization', curveType: 'function', legend: { position: 'bottom' }, pointSize: 12, vAxis: {title: "Values", titleTextStyle: {italic: false}}, hAxis: {title: "Time", titleTextStyle: {italic: false}}, explorer: { actions: ['dragToZoom', 'rightClickToReset'], axis: 'vertical' } }; var chart = new google.visualization.LineChart(document.getElementById('chart_div')); chart.draw(data, options); } </script> </head>
Вот как выглядит моя база данных (phpmyadmin):
Вам необходимо ввести дату и время в свой DataTable, как 'datetime'
данных 'datetime'
:
$table['cols'] = array( array('label' => 'Time', 'type' => 'datetime'), array('label' => 'PH', 'type' => 'number'), array('label' => 'temperature','type' => 'number'), array('label' => 'Chlorine','type' => 'number'), ); $rows = array(); while($r = mysql_fetch_assoc($sth)) { // assumes dates are in the format "yyyy-MM-dd" $dateString = $r['Date']; $dateArray = explode('-', $dateString); $year = $dateArray[0]; $month = $dateArray[1] - 1; // subtract 1 to convert to javascript's 0-indexed months $day = $dateArray[2]; // assumes time is in the format "hh:mm:ss" $timeString = $r['Time']; $timeArray = explode(':', $timeString); $hours = $timeArray[0]; $minutes = $timeArray[1]; $seconds = $timeArray[2]; $temp = array(); $temp[] = array('v' => "Date($year, $month, $day, $hours, $minutes, $seconds)"); $temp[] = array('v' => (string) $r['PH']); $temp[] = array('v' => (string) $r['temperature']); $temp[] = array('v' => (string) $r['Chlorine']); $rows[] = array('c' => $temp); } $table['rows'] = $rows; $jsonTable = json_encode($table); echo $jsonTable;
Я узнал способ сделать это в базе данных, чтобы вы получили именно ту информацию, которая вам нужна для этого, без всякого кодового волшебства. Я расскажу об этом здесь, если кто-то другой наткнется на этот вопрос и любит делать это таким образом.
Так выглядит мой запрос, так как у меня был один столбец с типом datetime:
SELECT CONCAT(DATE_FORMAT(date, '%Y, '), DATE_FORMAT(date, '%c') - 1, DATE_FORMAT(date, ', %e, %H, %i, %S')) AS date FROM my_table
Я тестировал этот запрос, и он работает, но я думаю, что для OP будет выглядеть примерно так:
SELECT CONCAT(DATE_FORMAT(Date, '%Y, '), DATE_FORMAT(Date, '%c') - 1, DATE_FORMAT(Date, ', %e, '), DATE_FORMAT(Time, '%H, %i, %S')) AS date, amount FROM my_table
Для образца кода PHP посмотрите на сообщение @asgallant. Это небольшой вариант для его кода:
$temp[] = array('v' => "Date(your_preferred_method_for_fetching_the_query_above)");
Примечание: кредит также относится к @asgallant, когда я пришел к этой идее после того, как я впервые сделал это таким образом.
Вопросы и предложения приветствуются.