2012-02-21 19 views
7

Tengo una pequeña aplicación bailarina que sirve algo de HTML (incluido el javascript para llamar a la API google charts) y para otras URL consulta una base de datos y devuelve los datos en JSON codificado en un formulario puede pasar a google.visualization.DataTable. El javascript consulta la aplicación bailarina de los datos JSON a continuación, pasa en las listas de API de Google - Una versión simplificada es:enviando fechas JSON a Google charts API desde Perl

<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> 

El problema es que algunos de los datos devueltos por el Perl incluye fechas/marcas de tiempo y por lo que debe tiene el tipo establecido en "fecha y hora":

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

en JavaScript que podría crear una fecha para pasar a la API de gráficos de Google con:

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

¿Cómo puedo enviar un encod fecha ed en JSON desde Perl de modo que la API de gráficos de google lo entienda? Si no puede, ¿qué otras opciones podrían estar disponibles para mí?

Respuesta

17

JSON no admite datetime como tipos de datos. Pero según la documentación de Google, puede enviar una cadena con este formato:

JSON no admite valores de fecha de JavaScript (por ejemplo, "nueva fecha (2008,1,28,0,31,26)" ; la implementación API sí lo hace. Sin embargo, ahora la API admite una representación JSON válida y personalizada de fechas como una cadena en el siguiente formato: Fecha (año, mes, día [, hora, minuto, segundo [, milisegundo]]) donde todo tras día es opcional, y meses son cero basado-

Google Chart Tools Datasource Protocol

+0

gracias Voy a tratar de que . – bohica

+0

Acabo de hacer ayer, y lo tenía funcionando;) – benjaoming

+0

Gracias, eso funcionó aunque no pude lograr que se muestren los milisegundos. – bohica

8

solo para aclarar:. debe escribir el valor de la celda como una cadena que se ve así: Fecha (año, mes). por su ejemplo:

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

esperanza de que ayuda, y correcta para usted como lo estoy usando en PHP y Perl no

3

yo estaba corriendo en mismo problema y la solución anterior no funcionó. Después de buscar durante horas encontré la siguiente publicación y la solución funcionó.

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

No incluya "nueva" en la cadena JSON por lo que será simplemente: "Date (2012, 1, 08, 09, 32, 0)"

+0

No puede decir "la solución anterior no funcionó". Si lee las soluciones cuidadosamente, verá que sugieren que muestren "Fecha (año, mes, día)" sin la "nueva". Entonces, ¿qué está mal con esas respuestas? –

+0

Irónicamente a pesar del comentario de @ JoséRamón, me había perdido la parte de omitir la palabra clave 'new', ¡y esta fue la respuesta que funcionó para mí! +1! –

Cuestiones relacionadas