2017-11-20 9 views
0

セントラルタイムに格納されている日付があります。次の書式で表されます。2017-11-19T23:39:35.280000。現在のタイムゾーンでISO形式の日付に変換したいと思います。私は単にnew Date()を作成するときに動作するようにしましたが、その後.toISOString()と呼ぶと、それは雑然としています。コードは次のとおりです。現在のタイムゾーンでセントラルタイムの日付をISO文字列に変換する

function convertCentralToLocal() { 
    const centralOffset = 360; 
    const dateInCentralMs = new Date('2017-11-19T23:39:35.280000').getTime(); 
    const now = new Date(); 
    const localOffset = now.getTimezoneOffset(); 

    // this works: Sun Nov 19 2017 23:39:35 GMT-0600 (CST) 
    const d = new Date(dateInCentralMs + ((centralOffset - localOffset) * 60000)); 

    // this seems to give the date six hours off: 2017-11-20T05:39:35.280Z 
    const iso = d.toISOString(); 
} 

GMTの問題ですか?私は失われた気分です。

+0

"CST"私は、米国中部標準時であり、キューバ標準時または中国標準時ではないと思います。米国のCSTは、UTC -0600です。組み込みパーサーを使用しないでください。[* Date.parseが間違った結果をもたらすのはなぜですか?*](https://stackoverflow.com/questions/2587345/why-does-date-parse-give-incorrect-results )* toISOString *メソッドは常にUTCですが、両方の文字列は同じ瞬間を表しますが、異なるタイムゾーンで表されます。また、[* JavaScriptの日付の書式設定に関するドキュメントはどこにありますか?*](https://stackoverflow.com/questions/1056728/where-can-i-find-documentation-on-formatting-a-date-in - ジャバスクリプト) – RobG

答えて

0

それはISO 8601は、日付/時刻を表すために、固定のタイムゾーンを定義していませんが、それは同様のタイムゾーンといくつかの日付/時刻形式を表すための記号を定義しないというのは本当です:

Date and Time Formats

TZDはタイムゾーン指示子(Zまたは+ HH:MMまたは-hh:MM)=

Date.prototype.toISOString()

を3210

MDNであなたはタイムゾーンは常にゼロUTCオフセットされることを読み取ることができます。

をtoISOString()メソッドは(常に24または27文字の長され、(ISO 8601)簡略化され、拡張ISO形式の文字列を返します。 YYYY-MM-DDTHH:mm:ss.sssZまたは±YYYYYY-MM-DDTHH:mm:ss.sssZ)。 タイムゾーンは、接尾辞 "Z"で示されるように、常にゼロのUTCオフセットです。

具体的には、Date.toISOStringMethodです。固定形式(YYYY-MM-DDTHH:mm:ss.sssZまたは±YYYYYY-MM-DDTHH:mm:ss.sssZ)が選択されたのと同じ方法で、ISO表現に特定のタイムゾーンが選択されていました。

この特殊性を回避するには、toISOString()を以下のthis linkのように実装するか、独自の例を使用します。

関連する問題