Question

Mon objectif est de convertir un horodatage de MySQL en un objet Date JavaScript de manière efficace. Voici l'extrait de code actuel qui convertit l'horodatage MySQL en une date formatée en PHP:

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

J'utilise ensuite cette valeur $ date pour un graphique à l'aide de l'API de création de graphiques de Google, qui requiert l'objet Date JavaScript:

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

Le problème est que l'objet Date JavaScript commence l'index du mois par 0, ainsi la sortie est toujours 1 mois à l'avance . Quel est le moyen le plus efficace de traiter ce problème?

Merci d'avance!

Était-ce utile?

La solution

Vous pouvez fournir au constructeur Date une date au format mm / jj / aaaa ou aaaa / mm / jj et le convertira:

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

Autres conseils

Vous devez soustraire manuellement ce 1 supplémentaire du numéro du mois, je le crains. L’objet JS Date est un désordre.

Pour obtenir une date dans la Représentation de la chaîne de date compatible avec la Google Charts DataTable aime

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

sans passer en revue les lignes de la requête en php, vous pourriez avoir le format MySQL directement comme ceci:

<?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);

puis en javascript:

var data = google.visualization.arrayToDataTable(<?php echo($json) ?>);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top