web-dev-qa-db-ja.com

JavaScriptの日付を作成するときにタイムゾーンを指定するにはどうすればよいですか?

2014年1月1日の午前8時までカウントダウンするように設定されたカウントダウンクロックがあります。

私は次のコードを使用して日付を設定しています:

var futureDate = new Date(2014, 0, 1, 8, 0, 0, 0);

これは機能しますが、さらに一歩進んで特定のタイムゾーンに設定したいと思います。私の場合、UTC -7。

私は この答え を読んだことがあります:

new Date(Date.UTC(year, month, day, hour, minute, second))

しかし、私が混乱しているのは、タイムゾーンをUTC -7に設定する方法であり、オンラインで読むことで混乱が生じるだけです。

誰かがDate.UTCは機能します。指定したタイムゾーンに基づいてカウントダウンクロックがカウントダウンするようにタイムゾーンを設定するにはどうすればよいですか。

注:回答はすべてクライアント側のみのコードでなければなりません。

29
L84

誰かがDate.UTCの仕組みを説明できますか

Date.UTC は、指定された年、月、日付などの時間値をオフセットなしで作成します。したがって、クライアントマシンがたとえばUTC +05:00に設定されている場合:

var d = new Date(Date.UTC(2013, 11, 30, 12, 0, 0));

2013年12月30日の正午に相当する日付をグリニッジで作成します。日付を通知すると、2013-12-30T17:00:00 + 05:00に相当する現地時間(+5:00と仮定)が出力されます。

また、指定したタイムゾーンに基づいてカウントダウンクロックがカウントダウンするようにタイムゾーンを設定するにはどうすればよいですか?

タイムゾーンを設定することはできませんが、UTC値を使用して日付オブジェクトを作成し、オフセットの時間と分を調整してから、UTCメソッドを使用してカウントダウンの日付と時刻のコンポーネントを取得できます。

例えば.

function z(n){return (n < 10? '0' : '') + n;}

var d = new Date(Date.UTC(2012, 11, 30, 12, 0, 0));

d.setUTCHours(d.getUTCHours() - 7);

alert(d.getUTCFullYear() + '-' + z(d.getUTCMonth() + 1) + '-' + 
      z(d.getUTCDate()) + 'T' + z(d.getUTCHours()) + ':' +
      z(d.getUTCMinutes()) + ':' + z(d.getUTCSeconds()) + '-07:00'
);

// 2012-12-30T05:00:00-07:00

非UTCメソッドが使用される場合、ローカルオフセットが結果に影響します。

47
RobG