web-dev-qa-db-ja.com

moment.jsを使用して特定のタイムゾーンで時間を作成する方法

設定されたタイムゾーンで事前にフォーマットされた時刻を送信するこのバックエンドがありますが、そのタイムゾーンの情報はありません。文字列は「2013-08-26 16:55:00」のようになります。

次の文字列で新しいmoment.jsインスタンスを作成できます。

var time = moment("2013-08-26 16:55:00") //this creates time in my tz

しかし、これは自分のタイムゾーンでのみインスタンスを作成します。

Moment.jsには、特定のタイムゾーンでオブジェクトのインスタンスを作成できるプラグインがあり、それはうまく機能しますが、オブジェクトに何をポイントさせたいかを言うことはできません。

私がニューヨークにいて、これを行う場合:

var time = moment("2013-08-26 16:55:00").tz("America/Los_Angeles");

その結果、時間は16:55ではなく13:55になりますが、LAです。

私が欲しいのは、16:55と言うインスタンスを作成することですが、LA時間です。

私が尋ねている理由は、これをしたいからです。

var now = moment.tz("America/Los_Angeles");
var end = moment("2013-08-26 16:55:00"); //plus something to convert LA time

var timeLeft = end.diff(now, "minutes");

それを行う方法はありますか?

28
DaniOcean

ほとんどの場合、これを行うことができます:

moment.tz("2013-08-26 16:55:00", "America/Los_Angeles")

ISO8601以外の入力が必要な場合は、2番目のパラメーターとしてフォーマット文字列を指定し、3番目のパラメーターとしてタイムゾーンを指定します。

moment.tz("8/26/2013 4:55 pm", "M/D/YYYY h:mm a", "America/Los_Angeles")

そして、瞬間の「厳密な解析」モードを使用する必要がある場合、それは3番目のパラメーターに入り、タイムゾーンは4番目の位置に移動します。

moment.tz("8/26/2013 4:55 pm", "M/D/YYYY h:mm a", true, "America/Los_Angeles")
28

特定のタイムゾーンですべてを計算したい場合は、以下を使用してデフォルトのタイムゾーンを設定します

A)moment.tz.setDefault("America/Los_Angeles");

私のユースケース(node.jsプロジェクト)では、次のようなモーメントモジュールが必要になった直後に設定します。

_let moment = require('moment');
require('moment-timezone');
moment.tz.setDefault("America/Los_Angeles");
_

moment()へのすべての呼び出しは、 "America/Los_Angeles"設定で時間を作成します。これは、以下を使用する場合とは異なります。

B)moment.tz("2017-03-04 00:00", "America/Los_Angeles")

OR

C)moment("2017-03-04 00:00").tz("America/Los_Angeles")

どちらもモーメントオブジェクトをUTC時間で作成し(既にデフォルトを変更していない限り)、それをロサンゼルスのタイムゾーンに変換します。

ブラウザコンソールで上記のBまたはCを実行すると、次のようになります。

__d: Fri Mar 03 2017 16:00:00 GMT-0800 (PST)
_i: "2017-3-4 00:00"
_

_dは3月3日の午後4時を示しています。これは、モーメントオブジェクトが3月4日の午前12:00にUTC時間で作成され、次に太平洋時間帯に変換されるためです。

ソース: http://momentjs.com/timezone/docs/#/using-timezones/default-timezone/

4
timmcliu