さて、あなたはこの質問が既に尋ねられたと思うかもしれませんが、私はそうではないと思います。私がすべてについて読んだソリューションには、この「ジグソーパズル」のテクニック(getUTCMonth() + getUTCMinutes + ...
など)がありました。しかし、2つのUTC(!)日付間の経過秒数を比較したいだけなので、これは当てはまりません。
誰もが知っているように、次の方法で現在の(非UTC)日付を取得できます。
_var d = new Date();
var t_millis = d.getTime();
_
しかし、これは私が望むものではありません。現在のシステム日付をUTC andミリ秒で表示したいので、文字列をいじる必要はありません。変数_t_millis
_には、UTCではなく、GMTでの現在のタイムスタンプのミリ秒の値が含まれています。 (d
もGMTに含まれるため。nless getTime()は、一種の暗黙的なタイムゾーン変換を行います。つまり、オフセットを追加します[〜#〜] before [〜 #〜]ミリ秒を渡しますが、それについてはどこでも読んだことがありません)
それでは、オフセットを時間値に追加する以外に方法はありませんか?他の言語で知られているgetUTCTimeMillis()
のような関数が欠けています。
これは古い質問ですが、ここに新しい訪問者のために[〜#〜] correct [〜#〜]回答があります:
Date.now();
1970年1月1日00:00:00 UTCから経過したミリ秒数を返します。
時刻のミリ秒の値は、タイムゾーンに関係なく同じになります。つまり、地球上には、0より大きいミリ秒単位で異なるタイムゾーンはありません。 (それらは、時間数または分単位の整数で異なる場合がありますが、秒またはミリ秒では異なりません。)
つまり、getTime()
isから返される値は、UTC相対のタイムスタンプです。地球上の非常に異なる場所にある2つのWebブラウザーが同時にDateオブジェクトを作成する場合、それらは両方とも.getTime()
から同じ値を取得します(時計が同期していると想定されますが、もちろん可能性は非常に低いです) 。
ここで:1338585185539これは、ブラウザから取得したタイムスタンプです。私はテキサス州オースティンにいますが、今は午後4時13分です(タイムスタンプはそれより少し前になります)。マシンのDateインスタンスにプラグインして、それが何を言っているかを確認します。
(編集 —後世のために、そのタイムスタンプは2012年6月1日からのものです。)
どのように:
var now = new Date();
var utc_now = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
console.log('UTC: ' + utc_now) // correct UTC time but wrong timezone!
console.log('UTC (in ms): ' + utc_now.getTime())
この関数を使用して問題を解決しました。
function getUTCNow()
{
var now = new Date();
var time = now.getTime();
var offset = now.getTimezoneOffset();
offset = offset * 60000;
return time - offset;
}
UTCの日付からタイムスタンプを取得するには、その日付のタイムゾーンと夏時間を考慮する必要があります。たとえば、1月または7月の日付は1時間の差を意味する可能性があります。
以下のオプションはそれを行います。
Date.prototype.getUTCTime = function () {
return this.getTime() - (this.getTimezoneOffset() * 60000);
};
次のように使用できます。
var date = new Date();
var timestamp = date.getUTCTime();