Pregunta

Mi objetivo es convertir una marca de tiempo de MySQL en un objeto Fecha de JavaScript de una manera eficiente. Aquí está mi fragmento actual que convierte la marca de tiempo de MySQL en una fecha formateada en PHP:

<?php
// formats timestamp into following format: 2009, 7, 30
$date =  date("Y, n, j", strtotime($row["date"]));
?>

A continuación, uso este valor de $ date para un gráfico que utiliza la API de gráficos de Google que requiere el objeto Fecha de JavaScript:

data.setValue(<?=$count;?>, 0, new Date(<?=$date;?>));

El problema es que el objeto Fecha de JavaScript comienza el índice del mes con 0, por lo que la salida siempre es 1 mes por adelantado . ¿Cuál es la forma más eficiente de tratar este problema?

Gracias de antemano!

¿Fue útil?

Solución

Puede darle al constructor de Date una fecha en formato mm / dd / aaaa o aaaa / mm / dd y la convertirá:

>>> new Date('7/30/2009');
Thu Jul 30 2009 00:00:00 GMT-0700 (Pacific Daylight Time)
>>> new Date('2009/7/30');
Thu Jul 30 2009 00:00:00 GMT-0700 (Pacific Daylight Time)

Otros consejos

Debes restar manualmente ese 1 extra del número del mes, me temo. El objeto JS Date es un desastre.

Para obtener una fecha en la Representación de cadena de fecha compatible con la Tabla de datos de Google Charts me gusta

"Date(2015,0,31)" // note the quotes from the json string and the 0 for January

sin recorrer las filas de consultas en php, podría tener un formato MySQL directamente así:

<?php
$sql = "
    SELECT 
        CONCAT('Date(', YEAR(datefield), ',', (MONTH(datefield)-1), ',', DAY(datefield), ')') AS gChartDate, 
        valuefield
    FROM 
        table 
    ORDER BY
        datefield
";
$query = $pdo->query($sql);
$fetchAll = $query->fetchAll(PDO::FETCH_NUM); // fetch in not-associative array
array_unshift($fetchAll, [['type'=>'date', 'label'=>'date'], 'value']); // add title row
$json = json_encode($fetchAll, JSON_NUMERIC_CHECK);

luego en javascript:

var data = google.visualization.arrayToDataTable(<?php echo($json) ?>);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top