1. ホーム
  2. javascript

[解決済み] JavaScriptでUTCタイムスタンプを取得するには?

2022-04-18 12:03:56

質問

Webアプリケーションを書くときに、(サーバー側で)保存することは意味があります。 すべて UTCタイムスタンプとしてDBに保存されます。

JavaScriptでタイムゾーンを操作することは、ネイティブではあまりできないことに気づいたときは驚きました。

Dateオブジェクトを少し拡張してみました。この機能は意味があるのでしょうか?基本的に、私が何かをサーバーに送るときは、毎回この関数でフォーマットされたタイムスタンプになるんだ...。

何か大きな問題はないでしょうか?あるいは、別の角度からの解決策があるでしょうか?

Date.prototype.getUTCTime = function(){ 
  return new Date(
    this.getUTCFullYear(),
    this.getUTCMonth(),
    this.getUTCDate(),
    this.getUTCHours(),
    this.getUTCMinutes(), 
    this.getUTCSeconds()
  ).getTime(); 
}

ただ、ちょっと複雑な感じがします。それに、パフォーマンスについてもあまり自信がありません。

解決方法は?

  1. この方法で作成された日付は、ローカルのタイムゾーンを使用するため、作成された日付が不正確になります。ある日付オブジェクトのタイムゾーンを設定するには、タイムゾーンを含む日付文字列からそれを構築する必要があります。(古いAndroidのブラウザでは、これがうまくいかないことがありました)。

  2. 注意点 getTime() は秒ではなくミリ秒を返します。

UTC/Unixタイムスタンプの場合、以下のようにすれば十分でしょう。

Math.floor((new Date()).getTime() / 1000)

現在のタイムゾーンオフセットを結果に織り込みます。文字列表現の場合。 デビッド・エリス という答えが返ってきます。

明確にするため。

new Date(Y, M, D, h, m, s)

その入力は、次のように扱われます。 ローカルタイム . もし UTC時間 を渡すと、結果が異なります。観察してみてください(私は今、GMT +02:00で、07:50です)。

> var d1 = new Date();
> d1.toUTCString();
"Sun, 18 Mar 2012 05:50:34 GMT" // two hours less than my local time
> Math.floor(d1.getTime()/ 1000)
1332049834 

> var d2 = new Date( d1.getUTCFullYear(), d1.getUTCMonth(), d1.getUTCDate(), d1.getUTCHours(), d1.getUTCMinutes(), d1.getUTCSeconds() );
> d2.toUTCString();
"Sun, 18 Mar 2012 03:50:34 GMT" // four hours less than my local time, and two hours less than the original time - because my GMT+2 input was interpreted as GMT+0!
> Math.floor(d2.getTime()/ 1000)
1332042634

また、以下のことに注意してください。 getUTCDate() は代用できません。 getUTCDay() . これは getUTCDate() は以下を返します。 その月の日 ;一方 getUTCDay() リターン 曜日 .