Php 为什么';谷歌图表不能使用这种日期格式吗?
我正在使用PHP和SQL生成使用Google图表的图表 我有一个特别的图表,我已经开始,但谷歌图表似乎不喜欢SQL返回的日期格式 代码Php 为什么';谷歌图表不能使用这种日期格式吗?,php,sql,json,Php,Sql,Json,我正在使用PHP和SQL生成使用Google图表的图表 我有一个特别的图表,我已经开始,但谷歌图表似乎不喜欢SQL返回的日期格式 代码 <?php include('core/connection.php'); $stid = oci_parse($conn, " SELECT EntryDate AS \"Date\", COUNT(OrderNo) AS \"Orders\" FROM Orders WHERE EntryDate > '01-MAY-
<?php
include('core/connection.php');
$stid = oci_parse($conn, "
SELECT EntryDate AS \"Date\", COUNT(OrderNo) AS \"Orders\"
FROM Orders
WHERE EntryDate > '01-MAY-2014'
AND CustomerNo = 1
GROUP BY EntryDate
");
oci_execute($stid);
$table = array();
$table['cols'] = array(
array('label' => 'Date', 'type' => 'date'),
array('label' => 'Orders', 'type' => 'number')
);
$rows = array();
while($row = oci_fetch_assoc($stid)) {
$temp = array();
$date = new \DateTime($row['Date']);
$dateStringForGoogleCharts = $date->format("Y/m/d H:i");
$temp[] = array('v' => (int) $dateStringForGoogleCharts);
$temp[] = array('v' => (int) $row['Orders']);
$rows[] = array('c' => $temp);
}
$table['rows'] = $rows;
$jsonTable = json_encode($table);
oci_close($conn);
?>
<html>
<head>
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.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 = {
width: 1600,
height: 800
};
// Instantiate and draw our chart, passing in some options.
// Do not forget to check your div ID
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chart_div"></div>
</body>
</html>
我使用以下JS成功地做到了这一点:
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('datetime', 'Date');
data.addColumn('number', 'Value');
data.addRows(<?=$json?>);
var chart = new google.visualization.AnnotatedTimeLine(document.getElementById('chart_div'));
chart.draw(data, {displayAnnotations: true, colors: ['blue', 'red']});
}
关键点是“Y/m/dh:i”的格式——这就是谷歌喜欢的图表格式
我的建议是使用将来自数据库的日期格式转换为此格式。我似乎还记得在使用API所接受的格式时遇到过一些尝试和错误,但这种格式确实有效。哪个数据库是oracle、mysql?谢谢你的回答!我决不是专家,我对这一切都是新手,但我正在慢慢地到达那里。我已经试着遵循你的代码。我有$temp[]=array('v'=>(int)$r['DATE'])
我猜这是SQL返回的日期行,因此当前返回格式的示例是08-MAY-2014
。Google Charts期望得到什么?我能不能包装一下这个$temp[]=array('v'=>(int)$r['DATE'])我的建议是使用DateTime将数据库中的日期格式转换为“Y/m/dh:i”格式。我似乎记得一些尝试和错误得到了一个被API接受的格式,但这种格式肯定是有效的。谢谢!你能检查一下我更新的问题吗?我现在收到一条错误消息,undefined不是一个红色框中的函数
。HTML和JS对我有效,任意JSON字符串取自谷歌图表网站。你能把$jsonTable中的字符串贴在这里吗?{“cols”:[{“label”:“Date”,“type”:“Date”},{“label”:“Orders”,“type”:“number”}],“rows”:[{“c”:[{“v”:2014},{“v”:8},{“c”:[{“v”:2014},{“v”:10},{“c”:[{“v”:2014},{“v”:9},{“c”:[{“v”:2014},{“v”:9},{“v”},{“v”:9}/code>。
$date = new \DateTime($row['date']);
$dateStringForGoogleCharts = $date->format("Y/m/d H:i");