質問

私の目標は、タイムスタンプをMySQLからJavaScript Dateオブジェクトに効率的な方法で変換することです。これは、MySQLタイムスタンプをPHPでフォーマットされた日付に変換する現在のスニペットです。

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

次に、JavaScript Dateオブジェクトを必要とするGoogleのチャート作成APIを使用するチャートに、この $ date 値を使用しています:

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

問題は、JavaScript Dateオブジェクトが月のインデックスを0で開始するため、出力は常に1か月事前にになることです。この問題に対処する最も効率的な方法は何ですか?

事前に感謝します!

役に立ちましたか?

解決

日付コンストラクターにmm / dd / yyyyまたはyyyy / mm / dd形式の日付を入力すると、変換されます:

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

他のヒント

あなたが恐れている月の数字から余分な 1 を手動で差し引く必要があります。 JS Dateオブジェクトは混乱です。

Google Chart DataTableと互換性のある日付文字列表現で日付を取得するには好き

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

PHPでクエリ行をウォークスルーせずに、MySQLで次のように直接フォーマットすることができます。

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

次にJavaScriptで:

var data = google.visualization.arrayToDataTable(<?php echo($json) ?>);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top