2013-07-09 21 views
8

私はそうのようにフォーマット.NETサービスからのUTC日付/時刻のリスト、返す:クライアントでmoment.js、タイムゾーンと夏時間

"2013-07-09 19:48:07 +00:00". 

を、私はにこれらの文字列値のそれぞれを変換しますそのような対応するUTCベースのモーメント

var fooUtc = new moment.utc(serverDateTimeString) 

ページには、ユーザーが変更できるタイムゾーンのリストを含むドループダウンがあります。私はそのようにように、オフセット選択したタイムゾーンに渡し、各瞬間を表示

{ 
    id: "Central Standard Time", 
    label: "(UTC-06:00) Central Time (US & Canada)", 
    observesDaylightSavings: true, 
    baseUtcOffset: { 
     asHours: -6, 
     asMinutes: -360, 
     asText: "-06:00" 
} 

fooUtc.local().zone(selectedTimeZone.baseUtcOffset.asMinutes).format() 

しかし、その結果これらは、以下のようなタイムゾーンオブジェクトのコレクションに関連付けられています.Netからのタイムゾーンデータがdstオフセットとdst以外のオフセットを区別しないため、夏時間の削減は考慮されていません。

moment.jsまたは新しい瞬間、タイムゾーンビットで、この作品を作るための方法はありますか?私は、標準のUTCオフセット名(例: "Central Standard Time")を特定のタイムゾーンのOlson DB識別子(例: "America/Chicago")にマップできれば可能ですが、もっと簡単な方法があればお知らせ下さい。

+0

私は[この記事]に基づいて、マッパーファイルを作成することになった[1] [1]:http://stackoverflow.com/questions/8372537/converting-olson-tzid-to- windows-time-zone –

答えて

5

.Net側ではNoda Time、クライアント側ではmoment-timezoneを使用して、IANA/OlsonタイムゾーンIDを渡して調べる必要があります。

あなたは、ドロップダウンリストで、WindowsのタイムゾーンIDに固執する場合は、あなたは野田時間中に埋め込まれたCLDRデータで変換を行うことができます。 How to translate between Windows and IANA time zones?

しかし、よりよい解決策は、すべて一緒に、Windowsのゾーンを避けるために、次のようになります。私はこの記事でそれを行う方法を文書化しています。 How should I populate a list of IANA/Olson time zones from Noda Time?

さらに、あなたはドロップダウンリストを、世界の地図を表示するコントロール(インラインまたはモーダル)に置き換えることができます。このコントロールを使用して、IANA /ユーザーは自分のタイムゾーンを簡単に選択できます。私が見ているこのための最高のコントロールはthis oneですが、そこにもいくつかの他のものがあります。

あなたはIANA /オルソンゾーンに厳格に対処することができる場合は、変換の必要はありません。 Windows TimeZoneInfoオブジェクトをあきらめて、Noda Timeを代わりに使うことができます。必要に応じて、タイムゾーン変換関数だけを置き換え、残りの部分はそのまま残すことができます。または、あなたはオールアウトして、DateTimeDateTimeOffsetのすべてをNoda Timeタイプに置き換えることができます。それはあなた次第です。

+0

は素晴らしいかもしれませんが、ユーザーの設定はタイムゾーンIDを使用してDBに保存されています。野田のヘッドアップをありがとう...私は見てみましょう... –