web-dev-qa-db-ja.com

node.jsの日付を常にUTC / GMTにすることはできますか?

私のアプリはLinuxサーバー上で実行され、時間は(当然)UTC/GMTに設定されています。ただし、アプリはMacデスクトップで開発され、通常、時刻はローカルタイムゾーンに設定されます。

実行するコード内のすべてのnew Date()を変更できます。

var date = new Date().getTime();

したがって、サーバーの日付が常にGMTであることを確認してください。

以前のバージョンのノードは常にUTC/GMTを返すために使用されていました を理解しています。この動作を元に戻す方法はありますか?

編集:コメントごとにgetTime()にタイムゾーンオフセットを追加することを削除しました-getTime()はすでにUTCにあるため。

20
mikemaccana

Node.jsのTZ構成パラメーターを次のように使用できます。

Bash(および関連)

export TZ=UTC

Powershellの場合

$env:TC = 'UTC'

次に、両方について:

nodejs server/index.js
23

Date#getTimeのMDNドキュメント から:

GetTimeメソッドによって返される値は、1970年1月1日00:00:00 UTCからのミリ秒数です。

日付/時刻を数値として保存しているとしたら(お勧めします)、getTimeは既にUTC、常にです。

次に、クライアントがサーバーに日付を要求するとします。サーバーが日付をtimestampとして提供する場合、これはnumberであり、クライアントは次のことを実行できます。

new Date(timestamp);

また、クライアントの現地時間に正しく調整されます。

もちろん、私はあなたの問題を誤解しているかもしれません。しかし、私はこれを指摘したいだけです...

new Date().getTime() + new Date().getTimezoneOffset();

...本当に意味をなすべきではありません。それは、UTCベースの時間を取り、それからそれをさらにオフセットし、本質的に時間をダブルオフセットします。

9
Dan Tao

moment.js は、日付を処理するための一般的なノードおよびブラウザーモジュールです。必要なものを提供するutcモードがあります。 http://momentjs.com/docs/#/manipulating/utc/

4
John Teague