为啥错误“c.getTimezoneOffset 不是函数”?

Posted

技术标签:

【中文标题】为啥错误“c.getTimezoneOffset 不是函数”?【英文标题】:Why error "c.getTimezoneOffset is not a function"?为什么错误“c.getTimezoneOffset 不是函数”? 【发布时间】:2016-09-19 05:33:29 【问题描述】:

我尝试使用从 mysql 检索数据的谷歌图表制作简单的折线图。我的 json 工作,但是当我尝试以完整编码调用它时,它说“c.getTimezoneOffset 不是一个函数”。

这里是我的 json php

<?php
include("config.php");

$query = "SELECT * FROM reading";
$sql = mysqli_query($con, $query);

if (!$sql) 
die("Error running $sql: " . mysql_error());


$results = array(
'cols' => array (
array('label' => 'Date', 'type' => 'datetime'),
array('label' => 'API', 'type' => 'number')
),
'rows' => array()
);
while($row = mysqli_fetch_assoc($sql)) 

$year=date("Y", strtotime($row['time']));
$month=date("m", strtotime($row['time']));
$day=date("d", strtotime($row['time']));
$hour=date("H", strtotime($row['time']));
$minute=date("i", strtotime($row['time']));
$second=date("s", strtotime($row['time']));

$results['rows'][] = array('c' => array(
array('v' => "time($year, $month, $day, $hour, $minute, $second)"),
array('v' => $row['api'])
));

$json = json_encode($results, JSON_NUMERIC_CHECK);
echo $json;
?>

这是我的json

"cols":["label":"Date","type":"datetime",
"label":"API","type":"number"],
"rows":["c":["v":"time(2016, 05, 22, 12, 24, 26)","v":26],
"c":["v":"time(2016, 05, 22, 12, 24, 41)","v":26],
"c":["v":"time(2016, 05, 22, 12, 24, 56)","v":27]]

这是我的 html 编码

<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() 
$.ajax(
url: 'getData.php',
dataType: 'json',
success: function (jsonData) 
// Create our data table out of JSON data loaded from server.
var data = new google.visualization.DataTable(jsonData);

// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, width: 400, height: 240);

);


</script>
</head>

<body>
<div id="chart_div"></div>
</body>
</html>

【问题讨论】:

你是自己调用c.getTimezoneOffset,而c来自你从PHP脚本注入的json对象,还是那个错误来自google lib? 【参考方案1】:

我遇到了同样的错误,不得不修改我的 JSON 以生成如下所示的字符串:

"c":["v":"Date(2018,9,16)","f":null

这意味着我的代码必须解析出年、月和日才能将其重新组合在一起。我正在使用 JSP,但希望这可以帮助那里的人:

createDateObj.put("v", "Date("+ createYear + "," + createMonth + "," + createDay + ")");

而不是简单地使用从 mySQL 返回的日期,如下所示:

createDateObj.put("v", createDate);

【讨论】:

【参考方案2】:

看来问题出在对time(...) 的调用上;我修改它们以实例化新的 Date 对象(例如Date(...)),一切似乎都按预期工作。

Example Codepen here

我修改了drawChart() 以跳过ajax 调用,直接使用您的示例JSON;我还更新了调用以使用latest version of Google Charts API。

【讨论】:

以上是关于为啥错误“c.getTimezoneOffset 不是函数”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥要构建离子错误? - 错误 65

为啥我会收到这种错误验证错误?

为啥我会收到错误数量的参数错误?

为啥此代码部分返回“分段错误”错误?

语法错误 (-201) 为啥?

为啥我会收到错误错误 C2664:'reverseString'