2012-02-21 18 views
7

我有一个小舞者应用程序,它提供了一些HTML(包括javascript来调用谷歌图表API),并为其他URL查询数据库并返回编码JSON中的数据表单可以传递给google.visualization.DataTable。 JavaScript的查询舞者应用的JSON数据然后将其传递到谷歌图表API - 简化版本是:将JSON日期发送到Perl的谷歌图表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.7.1/jquery.min.js"></script> 
    <script type="text/javascript"> 

     google.load('visualization', '1.0', {'packages':['corechart']}); 
     google.setOnLoadCallback(initialize); 

function initialize() { 
    var res = $.ajax({ 
     url: "/data/2", 
     dataType:"json", 
     async: false, 
     data: "{}", 
     contentType: "application/json", 
     error: function(jqXHR, textStatus, errorThrown) { 
      alert('textStatus ' + textStatus); 
      alert('errorThrown ' + errorThrown); 
     } 
    }); 
    jsonData = res.responseText; 
    var data = new google.visualization.DataTable(jsonData); 

    var chart = new google.visualization.BarChart(document.getElementById('chart_div')); 
    chart.draw(data, {width: 400, height: 240}); 

} 
    </script> 

的问题是,一些由Perl中返回的数据包括日期/时间标记等应有类型设置为“日期时间”:

{"rows":[{"c":[{"v":"WHAT_CAN_I_PUT_HERE"},{"v":"2095"}]}],"cols":[{"type":"datetime","label":"DTU"},{"type":"number","label":"COUNT"}]} 

在Javascript中,你可以创建一个日期传递给谷歌图表API有:

new Date(2012, 1, 08, 09, 32, 0) 

如何发送日期ENCOD编辑在Perl的JSON,使谷歌图表API理解它?如果你不能有什么其他的选择可以提供给我?

回答

17

JSON不支持datetime作为数据类型。但根据谷歌的文档,你可以发送这种格式的字符串:

JSON不支持JavaScript日期值(例如,“new Date(2008,1,28,0,31,26)” ;但是,API现在支持以下格式的日期的自定义有效JSON表示形式作为字符串:日期(年,月,日[,小时,分钟,秒[,毫秒]])一天之后是可选的,月是零基础

Google Chart Tools Datasource Protocol

+0

谢谢,我会尝试。 – bohica 2012-04-17 07:32:25

+0

我刚刚做了昨天,我有它的工作;) – benjaoming 2012-04-17 14:21:44

+0

谢谢,这工作,虽然我不能让它显示毫秒。 – bohica 2012-04-18 15:01:04

8

只是为了澄清: 您应该将单元格值写为如下所示的字符串:日期(年,月)。 您例如:

{"rows":[{"c":[{"v":"Date(year, month)"},{"v":"2095"}]}],"cols":[{"type":"datetime","label":"DTU"},{"type":"number","label":"COUNT"}]} 

希望帮助和纠正你,因为我在PHP中使用它,而不是perl的

3

我也陷入了同样的问题,上述方案没有奏效。搜索了几个小时后,我发现后面的文章和解决方案在那里工作。

https://groups.google.com/forum/#!msg/google-visualization-api/SCDuNjuo7xo/ofAOTVbZg7YJ

不包括在JSON字符串 “新”,所以它仅仅是: “日期(2012年,1,08,09,32,0)”

+0

你不能说“以上的解决方案没有工作”。如果你仔细阅读解决方案,你会发现他们建议输出“日期(年,月,日)”而不用“新”。那么这些答案有什么问题? – 2015-06-04 12:25:19

+0

讽刺的是,尽管@JoséRamón的评论,我错过了关于省略'new'关键字的部分,这就是为我效力的答案! +1! – 2015-11-28 16:51:49