9

サーバーから現在の時刻を返す JSON エンドポイントを設定しました。例えば:

{
  "myservertime": "2011-10-02T23:00+02:00"
}

つまり、これは現在 CET のサマータイムです。

今、私はそれを非常にうまく解析するjQueryコードも持っています。

$.sysTime = function(success) {

            $.ajax({
                url: '/jsontimepath/',
                dataType: 'json',
                async: false,
                success: function(json){
                    sysDateTime = new Date(Date.parse(json.myservertime));
                    console.log('The system time now is: ' + sysDateTime)
                }
            });

            return sysDateTime;
        };  

問題は、コンソールを確認すると、まだ間違った時刻が表示されることです...コンピューターのタイムゾーンの影響を受けています...たとえば、香港のユーザーの場合、上記の時刻は次のようになります。

2011 年 10 月 3 日月曜日 05:00:00 GMT+0800 (HKT)

有効な ISO8601 時刻文字列を指定すると、それが調整されるだけです。返される実際の時間は (そのタイムゾーンで) 正しいです...しかし、なぜそのように調整するのですか? 現地時間ではなくCET時間を返したい...

4

1 に答える 1

15

すべてが順調です、これを試してください:

new Date(Date.parse("2011-10-02T23:00+02:00")).getUTCHours()  //21

日付は正しく解析されます(予想どおりにタイムゾーンを考慮に入れます)。ただし、単に印刷Date.toString()すると、現在のブラウザのタイムゾーンの日付が表示されます(JavaDateオブジェクトの罪の1つが恥知らずにJavaScriptにコピーされます...)

メソッドのファミリーに固執するgetUTC*()と、正しい値が得られます(上記の例のように)。通常のget*()方法は常にブラウザのタイムゾーンの影響を受けます(解析した日付からのタイムゾーンではなく、失われます)。したがって、多くの場合、役に立たないことがあります。

別の例:2011-10-03 02:00 + 03:00は、実際には10月2日の23:00です。しかし、それを解析すると(私の現在のブラウザーのタイムゾーンは+0200(CEST)です):

new Date(Date.parse("2011-10-03T02:00+03:00"))  //Oct 03 01:00:00 GMT+0200

ただし、UTCでの現在の曜日は次のとおりです。

new Date(Date.parse("2011-10-03T02:00+03:00")).getUTCDate()  //2 (2nd of Oct)
于 2011-10-02T21:23:16.467 に答える