5

MySQL データベースのタイムスタンプは GMT 時間 [2013-07-19 10:12:56] です。DateTime と UTC として DB にある必要があることはわかっていますが、残念ながらこれがその方法です。

タイムスタンプを抽出して JavaScript [HighCharts] に渡す必要があります。

$time = strtotime('2013-07-19 10:12:56');
echo("Converting to UNIX Time: ");echo $time;
echo("Converting to JS Time: ");echo ($time*1000);

JavaScript はミリ秒単位で時間がかかるため、乗算は 1000 を購入します

出力: UNIX 時間に変換: 1374253976

出力: JS への変換:時間: 1374253976000

私が持っている質問は、なぜそれが 17.12 として HighCharts に表示されるのかということです

1374253976000 をhttp://www.epochconverter.comに入力すると、次のようになります:
GMT: Fri, 19 Jul 2013 17:12:56 GMT これは正しくありません。時刻は、データベースに 10:12:56 として表示されるはずです。

なぜそれが7時間になるのか、何か考えはありますか?

4

4 に答える 4

11

Epochtimeconverterは、Fri, 19 Jul 2013 10:12:56 GMT次のエポック時間があると言います

Epoch timestamp: 1374228776 
Timestamp in milliseconds: 1374228776000
Human time (GMT): Fri, 19 Jul 2013 10:12:56 GMT
Human time (your time zone): Friday, July 19, 2013 3:42:56 PM

あなたが得ているものではない ことに注意してください1374253976。それが問題です。エポックタイムからハイチャートなどへの変換は正しいです。間違うのは君の時代だ

特に明記されていない限り、PHP は文字列をサーバーのタイムゾーンにあるものとして扱います。GMTこれを試して、次のようにタイムゾーンを明示的に指定してください

$time = strtotime('2013-07-19 10:12:56' . ' GMT');
echo("Converting to UNIX Time: ");echo $time;
echo("Converting to JS Time: ");echo ($time*1000);

あなたが観察していた7時間の違いは、サーバーがタイムゾーン -7 ?

于 2013-07-26T18:23:49.560 に答える
2

問題#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 サポート チームのメンバーなので、彼のコメントは信頼できます。

于 2013-07-26T20:49:43.437 に答える