El índice de fecha del mes de JavaScript comienza con 0
-
05-07-2019 - |
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!
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) ?>);