1

データベースからこれを返すphpコードがあります。

[
{
    "Time": "2012-11-27 16:10:35",
    "NumPlayers": "1"
},
{
    "Time": "2012-11-27 16:24:55",
    "NumPlayers": "1"
},
{
    "Time": "2012-11-27 16:25:37",
    "NumPlayers": "2"
},
{
    "Time": "2012-11-27 16:29:33",
    "NumPlayers": "2"

時間はMySQLのタイムスタンプです。Highcharts javascriptチャートで使用するには、この形式にする必要があります。

data: [
[Date.UTC(1970,  9,  9), 0   ],
[Date.UTC(1970,  9, 14), 0.15],
[Date.UTC(1970, 10, 28), 0.35],
[Date.UTC(1970, 11, 12), 0.46],

MySQLの結果をループして、タイムスタンプをjavascriptDate.UTCオブジェクトに変換する方法を理解するのに問題があります。NumPlayers値をDate.UTCオブジェクトの後に配置し、以下の形式で出力する必要があります。私はPHPとjavascriptの初心者です:\

次のようになります。

data: [
[Date.UTC(2012, 11, 27, 16, 10, 35), 1],
[Date.UTC(2012, 11, 27, 16, 24, 55), 1],
[Date.UTC(2012, 11, 27, 16, 25, 37), 2],
[Date.UTC(2012, 11, 27, 16, 29, 33), 2],
4

5 に答える 5

2

Date.UTC(2012, 11, 27, 16, 10, 35)エポック()からのミリ秒数を返すだけであることを理解する必要があります1356624635000。したがって、オブジェクトをUNIXタイムスタンプに変換するだけで済みます(JSはミリ秒のタイムスタンプで動作するため1000倍ですが、PHPは秒で動作します)。

サンプルコード

$data = '[{"Time": "2012-11-27 16:10:35", "NumPlayers": "1"}, {"Time": "2012-11-27 16:24:55", "NumPlayers": "1"}]';

// Make sure date is parsed as UTC
date_default_timezone_set("UTC");

// Convert items into the desired format
$mapper = function($item) {
    return array(strtotime($item->Time)*1000, $item->NumPlayers);
}

echo json_encode(array_map($mapper, json_decode($data)));

出力

[[1354032635000,"1"],[1354033495000,"1"]]
于 2012-12-04T19:05:56.330 に答える
1

データベースから直接JSONを取得しているようです。これは、いつでも配列に変換できます。

$data = '[{"Time": "2012-11-27 16:10:35", "NumPlayers": "1"}, {"Time": "2012-11-27 16:24:55", "NumPlayers": "1"}]';
$arrayData = json_decode($data, true);

その後、配列を繰り返し処理し、配列の内容を必要なJS形式で出力できます。そんな感じ:

echo 'data: [' . PHP_EOL;
foreach ($arrayData as $item) {
    echo '[Date.UTC(';
    $tmp = preg_split( '/(-| |\:)/', $item['Time'] );
    echo implode(', ', $tmp);
    echo '), ' . $item['NumPlayers'] . '],';
    echo PHP_EOL;
}
echo PHP_EOL . '];';
于 2012-12-04T17:56:18.803 に答える
1

次を使用して、時間文字列をセクションに分割できます/[^\d]+/g

var finalData = [], numbers=/[^\d]+/g, item, dateParts, newDate;
for (var i=0, l=data.length; i<l; i++) {
     item = data[i];
     dateParts = item.Time.split(numbers);
     newDate = Date.UTC.apply(Date, dateParts);
     finalData.push([newDate, item.NumPlayers]);
}

参照:JavaScript正規表現に関するMDNのドキュメント/[^\d]/g正規表現です)。

于 2012-12-04T18:00:34.150 に答える
1

Highchartsにデータを提供する最良の方法は、データベースからフォーマットされたデータを取得することです。これにより、クライアント側でデータを行う必要がなくなります。

それを行うには、次のようなものに変更する必要がqueryあります。

バックエンド
$query = "SELECT UNIX_TIMESTAMP(date) * 1000 AS 'date', value FROM ...";

次に、結果をフロントエンドに送信します。
echo json_encode($result);

フロントエンドフロント
エンドで結果を取得するには、この場合はjQueryを使用し、それurlがURLであると想定します。

$.getJSON(url, function(json) {
    // decode json
    var data = $.parseJSON(json);
    // Then you just have to pass it to your series
});

または、日付の値をUTCで保存することをお勧めします。

于 2012-12-04T23:42:15.987 に答える
0
    var php_data = [
        {
            "Time": "2012-11-27 16:10:35",
            "NumPlayers": "1"
        },
        {
            "Time": "2012-11-27 16:24:55",
            "NumPlayers": "1"
        }
    ];

    var length = php_data.length;
    hc_data = [];

    for(var i = 0; i< length; i++){
      php_date = new Date(php_data[i]["Time"]);
      hc_data.push(
        [
            Date.UTC(
                php_date.getFullYear(), 
                php_date.getMonth() + 1, 
                php_date.getDate()
            ),
            php_data[i]["NumPlayers"]
        ]
      );
    }

    // hc_data is your Array
于 2012-12-04T18:09:42.967 に答える