2011-08-06 15 views
5

Tengo un problema extraño que me deja perplejo, pero estoy seguro de que alguien aquí sabrá lo que estoy haciendo mal. Todas las fechas están mostrando de forma incorrecta (es decir, junio es mostrando julio, está mostrando agosto)Google Charts API: Se muestra una fecha incorrecta

Mi código aquí:

// Load the Visualization API and the piechart package. 
google.load('visualization', '1.0', {'packages':['corechart']}); 

// Set a callback to run when the Google Visualization API is loaded. 
google.setOnLoadCallback(drawVisualization); 

// Callback that creates and populates a data table, 
// instantiates the pie chart, passes in the data and 
// draws it. 
function drawVisualization() { 

    var chartTable = new google.visualization.DataTable(); 
    chartTable.addColumn('date', 'Date'); 
    chartTable.addColumn('number', 'Sell'); 
    chartTable.addColumn('number', 'GP'); 
    chartTable.addRows(6); 

    chartTable.setValue(0, 0, new Date(2011, 06, 22)); 
    chartTable.setValue(0, 1, 1316.90); 
    chartTable.setValue(0, 2, 456.05); 
    chartTable.setValue(1, 0, new Date(2011, 06, 21)); 
    chartTable.setValue(1, 1, 1793.70); 
    chartTable.setValue(1, 2, 531.10); 
    chartTable.setValue(2, 0, new Date(2011, 06, 20)); 
    chartTable.setValue(2, 1, 13559.25); 
    chartTable.setValue(2, 2, 1337.75); 
    chartTable.setValue(3, 0, new Date(2011, 06, 17)); 
    chartTable.setValue(3, 1, 3034.15); 
    chartTable.setValue(3, 2, 892.30); 
    chartTable.setValue(4, 0, new Date(2011, 06, 16)); 
    chartTable.setValue(4, 1, 568.45); 
    chartTable.setValue(4, 2, 175.05); 
    chartTable.setValue(5, 0, new Date(2011, 06, 15)); 
    chartTable.setValue(5, 1, 7203.85); 
    chartTable.setValue(5, 2, 1343.45); 

    var date_formatter = new google.visualization.DateFormat({pattern: 'EEE, MMM-d'}); 
    date_formatter.format(chartTable, 0); // Apply format to first column of table 

    var currency_formatter = new google.visualization.NumberFormat({prefix: '$'}); 
    currency_formatter.format(chartTable, 1); // Apply format to second column of chart 
    currency_formatter.format(chartTable, 2); // Apply format to third column of chart 

    // Create and draw the visualization. 
    chart = new google.visualization.LineChart(document.getElementById('chart')); 
    chart.draw(chartTable, {width: 900, height: 400, title: 'Sales Summary', 
     vAxis: {maxValue: 20000, format: '$##,###', viewWindowMode: 'maximized'}, 
     hAxis: {direction: -1} 
    }); 

está mostrando todos los datos correctamente, excepto el día - en lugar de mostrar en el gráfico de junio, está mostrando julio ??? Los mismos días del mes pero el mes está mal?

Respuesta

10

El objeto Fecha de javascript comienza a contar meses en 00, entonces 00 = enero, 01 = febrero, etc. Así que cuando construyes tus fechas usando '06' en el campo del mes, en realidad es el 7mo mes o julio

+0

acaba de encontrar que al buscar más en Date Object! solo para dificultarlo –

+0

vamos, cada programador sabe que empiezas a contar en 0;) – wolv2012

+0

sí, pero los días del mes empiezan a contar con 1, ¡así que hay excepciones! Obtengo fecha de MySQL usando DATE_FORMAT con% m - no parece haber un método para obtener lo que necesito - ¡Tendré -1 cada mes! ¿Hay alguna manera mejor? (Por cierto, me costaría clasificarme como un "programador" :) –

2

para construir sobre wolv2012 respuesta, me acabo de encontrar con este problema: el sistema de conteo de JS mes está basado en cero, mientras que MySQL devuelve números meses entre 1 y 12.

fecha siendo formateada en SQL antes de que entre en el Javascript new Date(...), lo compenso agregando un "-1" a mi número de mes mientras sigo en SQL:

SELECT DATE_FORMAT(jobs.date, '%Y, %m-1, %d') ... 

Si bien esto parece un poco de bricolaje para mí, definitivamente funciona.

0

Tuve el mismo problema, este hilo me ayudó, ¡gracias! Sé que este post es muy antiguo, pero era relevante para mí, por lo que en caso de que ayuda a otra persona en el futuro:

Mi solución para SQL Server era: SELECT cast(DATEADD(month,-1,[mydate]) as newdate Y, de hecho, para el formato para el Google anotación gráfica I estaba usando, tuve que formatear así: replace(cast(DATEADD(month,-1,[mydate]) as date),'-', ',') as dateforJSON

Cuestiones relacionadas