[解決済み] ユーザーのタイムゾーンを無視して強制的にDate()で特定のタイムゾーンを使用する方法
質問
JSアプリでタイムスタンプ(eq.
1270544790922
)をサーバから受け取る(Ajax)。
そのタイムスタンプを元に
Date
オブジェクトを使用します。
var _date = new Date();
_date.setTime(1270544790922);
今すぐ
_date
はタイムスタンプを現在のユーザーロケールのタイムゾーンでデコードしています。私はそれを望んでいません。
私は _ を希望します。
date
で、このタイムスタンプをヨーロッパのヘルシンキ市の現在時刻に変換します (ユーザーの現在のタイムゾーンは無視します)。
どうすればよいのでしょうか。
どのように解決するのですか?
Dateオブジェクトの基礎となる値は、実際にはUTCです。これを証明するために、もしあなたが
new Date(0)
と入力すると、次のようなものが表示されることに注意してください。
Wed Dec 31 1969 16:00:00 GMT-0800 (PST)
. 0 は GMT では 0 として扱われますが
.toString()
メソッドはローカルタイムを表示します。
大きな注意点として、UTC は ユニバーサル の略で、世界共通の時刻コードです。2つの異なる場所での現在の時刻は同じUTCですが、出力は異なるフォーマットで出力されます。
ここで必要なのは、いくつかのフォーマットです
var _date = new Date(1270544790922);
// outputs > "Tue Apr 06 2010 02:06:30 GMT-0700 (PDT)", for me
_date.toLocaleString('fi-FI', { timeZone: 'Europe/Helsinki' });
// outputs > "6.4.2010 klo 12.06.30"
_date.toLocaleString('en-US', { timeZone: 'Europe/Helsinki' });
// outputs > "4/6/2010, 12:06:30 PM"
これは動作しますが......他の日付メソッドはユーザーのタイムゾーンを記述するため、あなたの目的には使えません。あなたが欲しいのは、ヘルシンキのタイムゾーンに関連する日付オブジェクトです。この時点では、サードパーティのライブラリ(私はこれをお勧めします)を使用するか、日付オブジェクトをハックしてそのメソッドのほとんどを使用できるようにすることが選択肢となります。
オプション 1 - moment-timezoneのようなサードパーティ製のもの
moment(1270544790922).tz('Europe/Helsinki').format('YYYY-MM-DD HH:mm:ss')
// outputs > 2010-04-06 12:06:30
moment(1270544790922).tz('Europe/Helsinki').hour()
// outputs > 12
これは、次にやろうとしていることよりもずっとエレガントに見えます。
オプション2 - 日付オブジェクトをハックする
var currentHelsinkiHoursOffset = 2; // sometimes it is 3
var date = new Date(1270544790922);
var helsenkiOffset = currentHelsinkiHoursOffset*60*60000;
var userOffset = _date.getTimezoneOffset()*60000; // [min*60000 = ms]
var helsenkiTime = new Date(date.getTime()+ helsenkiOffset + userOffset);
// Outputs > Tue Apr 06 2010 12:06:30 GMT-0700 (PDT)
これはまだ GMT-0700 (PDT) だと思われていますが、あまり目を凝らさないようにすれば、目的に合った日付オブジェクトと勘違いすることができるかもしれません。
私は都合よくある部分を飛ばしてしまいました。を定義できるようにする必要があります。
currentHelsinkiOffset
. もし、あなたが
date.getTimezoneOffset()
を使うか、あるいは if 文を使ってタイムゾーンの変更がいつ行われるかを記述すれば、問題は解決するはずです。
結論 - 特にこの目的のためには、以下のような日付ライブラリを使うべきだと思います。 モーメントタイムゾーン .
関連
-
[解決済み] Vue.js - ネストされたデータを適切に監視する方法
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Androidで現在の時刻と日付を取得する方法
-
[解決済み] JavaScriptでクライアントのタイムゾーン(およびオフセット)を取得する
-
[解決済み] Javaで現在の日付と時刻をUTCまたはGMTで取得するにはどうすればよいですか?
-
[解決済み】文字列表現を使わずにタイムゾーンを設定した日付を作成する
-
[解決済み】UTCエポックをローカル日付に変換する
-
[解決済み] ECMAScriptとは?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる