問題#1
主な問題は、 を使用した変換ステップにありますstrtotime
。PHP は時間文字列とタイム ゾーンとの関係を推測しようとします (おそらくタイム ゾーンを使用します) が、あなたの状況では、適切に推測するにはさらに多くのことを知る必要があります。これは、時間文字列が GMT (グリニッジ標準時) で表されることを PHP に明示的に伝えることで実現できます。
strtotime
データベースの形式は YYYY-MM-DD HH:MM:SS のみであるため、呼び出し中に必要な GMT 識別子をデータベースに連結できます。
$time = strtotime('2013-07-19 10:12:56' . ' GMT');
例えば:
<pre>
<?php
$time = strtotime('2013-07-19 10:12:56' . ' GMT');
echo("Converting to UNIX Time: $time\n");
echo("Converting to JS Time: ");
echo ($time*1000);
?>
</pre>
UNIX 時間に変換: 1374228776
JS 時間に変換: 1374228776000
結果の UNIX 時間を Epoch Converter に貼り付けると、正しく次のようになります。GMT: Fri, 19 Jul 2013 10:12:56 GMT
問題#2
上記のように PHP コードを変更する必要がありますが、完全には機能していないため、別の問題が発生していることがわかります。(セバスチャンはこれであなたを助けようとしました。)
Sebastian のコメントに追加したいのは、JavaScript でチャートまたはチャート オブジェクトを作成する前に、グローバル設定を構成する必要があるということです。それ以外の場合、これらのチャートの出力には影響しません。そのため、コードにチャート オブジェクトが存在する前に、次の構成が適用されていることを確認する必要があります。
Highcharts.setOptions({
global: {
useUTC: false
}
});
(この構成を使用しない場合でも、グラフは正常に機能しますが、日付と時刻は、グラフを表示している各ユーザーのローカル タイム ゾーンではなく、グリニッジ標準時を基準にして表示されます。)
ディスカッション(ディスカッションが嫌いな人は読む必要がないため、後で配置します):
上記で提案した PHP コードの変更に従っている場合、正しい UTC/GMT 数値エポック時間が JavaScript に渡されることを確認しました。次のコードで、これを 100% 確実に確認できます。
Date.UTC(2013, 6, 19, 10, 12, 56)
1374228776000
new Date(1374228776000).toUTCString()
"Mon, 19 Aug 2013 10:12:56 GMT"
明らかに直面している 2 番目の問題は 2 つあります。Highcharts がこれを他の (ローカルなどの) タイムゾーンの値ではなく UTC/GMT 値として適切に解釈するようにし、Highcharts にタイムゾーンを目的の形式で適切に出力するように指示します。
Highcharts で時刻番号を適切に解釈させる: デフォルトでは、Highcharts は、これらのような数値時刻データが UTC [[1331028000000, 5]、[1331031600000, 6]、[1331035200000, 4]] であると想定します。JavaScript に奇妙なものが潜んでいて、時刻データの処理方法が変更されていない限り、その点は問題ありません。
Highcharts にチャート上の人間が読める日付で正しい時刻を表示させる: ここで API に細心の注意を払う必要があります: http://api.highcharts.com/highcharts#global.useUTC
ちなみに、Sebastian Bochan は Highcharts サポート チームのメンバーなので、彼のコメントは信頼できます。