問題

Webアプリケーションを作成している間、DB内のすべての日時をUTCタイムスタンプとして保存するのは理にかなっています。

私はあなたがJavaScriptでTimezone操作の面であまりネイティブにできなかったことに気づいたとき、私は驚きました。

私は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)
 

現在のタイムゾーンオフセットを結果に因みます。文字列表現の場合、 David Elis ' answerが機能します。

明確にするために:

 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()の曜日をを返します。

  同じタグがついた質問を見る

javascripttimezoneutc