1

私は EDT にいて、エンド ユーザーは PDT にいます。WebApp がエンド ユーザーのタイムゾーンで実行されているかのように動作するようにしたいと考えています (たとえば、旅行中であっても、家に帰る時間を表示するためです)。Java サーバーからのタイムスタンプは、エンド ユーザーのタイムゾーン ("Mon Oct 27 06:57:00 PDT 2014" など) を含むようにフォーマットされています。構成ファイルには、"America/Vancouver" などのエンド ユーザー TZ 文字列もあります。私はネイティブの Date() を使用しており、ユーザーに適切な時間を表示していますが、それを使用してクライアントの時間と時間を比較することはできません。私は moment.js に変更しようとしていますが、それを自分のやりたいようにする方法がわかりません。基本的に、上記のタイムスタンプが与えられた場合、m.hour() を呼び出して 6 を取得できるようにしたいと考えています。私はまた、エンドユーザー時間で年間通算日を取得できるようにしたいと考えています (両方とも「今」およびタイムスタンプの場合)、最後のタイムスタンプが現在の時刻からどれだけ遡るかを分単位で確認します。これが私の失敗した試みです:

var d = "Mon Oct 27 06:57:00 PDT 2014";
var ds = d.split(/ /).slice(1).join(' '); // eat "Mon "

var m = moment.tz(ds, "MMM D HH:mm:ss Z YYYY", "America/Vancouver");

alert("" + m.hour()); // 23 ???  Want "6"!

var n = moment.tz("America/Vancouver");
var df = n.diff(m, 'minute');
alert(m.format() + "\n" + n.format() +
      "\n" + df + " minutes ago");

フィドル: http://jsfiddle.net/up628qbq/

ありがとう!

4

2 に答える 2

1

z大文字の代わりにフォーマット文字列で小文字を使用しますZ。これは、タイム ゾーンの略語文字と一致します。

これは実際には省略形を特定のオフセットとして解釈しないことに注意してください。これは主に、略語があいまいになる可能性があるためです。( "CST" には 5 つの異なる意味があります)。このため、 DST フォールバック移行中の一部の値が正しく解釈されない場合があります。

たとえば、太平洋時間帯では、2014 年 11 月 2 日の午前 1:00 の 2 つのインスタンスがあります。1 つ目は PDT (-7) で、2 つ目は PST (-8) です。省略形を指定しても、momentはそれを使用してあいまいさを解消しません。作業しているインスタンスを特定したい場合は、数値のタイム ゾーン オフセットを含めて で解析する必要がありますZ

dddまた、分割してスライスする代わりに、曜日名に使用できます。

于 2014-10-27T20:31:45.087 に答える
0

ありがとうマット!「投票」するのに十分な評判がないので、フィドルで推奨される変更(フォーマットの削除splitと追加、への変更)を行いました: http://jsfiddle.net/up628qbq/1/dddZz

于 2014-10-28T12:12:03.503 に答える