web-dev-qa-db-ja.com

ミリ秒(UTC)での現在の日付の取得(文字列の使用なし)

さて、あなたはこの質問が既に尋ねられたと思うかもしれませんが、私はそうではないと思います。私がすべてについて読んだソリューションには、この「ジグソーパズル」のテクニック(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()のような関数が欠けています。

17
syntaxerror

これは古い質問ですが、ここに新しい訪問者のために[〜#〜] correct [〜#〜]回答があります:

Date.now();

1970年1月1日00:00:00 UTCから経過したミリ秒数を返します。

36
advncd

時刻のミリ秒の値は、タイムゾーンに関係なく同じになります。つまり、地球上には、0より大きいミリ秒単位で異なるタイムゾーンはありません。 (それらは、時間数または分単位の整数で異なる場合がありますが、秒またはミリ秒では異なりません。)

つまり、getTime()isから返される値は、UTC相対のタイムスタンプです。地球上の非常に異なる場所にある2つのWebブラウザーが同時にDateオブジェクトを作成する場合、それらは両方とも.getTime()から同じ値を取得します(時計が同期していると想定されますが、もちろん可能性は非常に低いです) 。

ここで:1338585185539これは、ブラウザから取得したタイムスタンプです。私はテキサス州オースティンにいますが、今は午後4時13分です(タイムスタンプはそれより少し前になります)。マシンのDateインスタンスにプラグインして、それが何を言っているかを確認します。

編集 —後世のために、そのタイムスタンプは2012年6月1日からのものです。)

19
Pointy

どのように:

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())
7
kirpit

この関数を使用して問題を解決しました。

function getUTCNow()
{
    var now = new Date();
    var time = now.getTime();
    var offset = now.getTimezoneOffset();
    offset = offset * 60000;
    return time - offset;
}
  • GetTime関数は、クライアントのタイムゾーンで1970年1月1日00:00:00から経過したミリ秒数を返します。
  • getTimezoneOffsetは、クライアントのタイムゾーンとUTC間の分単位のオフセットを返します。
  • オフセット=オフセット* 60000;この操作により、分がミリ秒に変換されます。
  • オフセットを差し引くと、1970年1月1日00:00:00 UTCから経過したミリ秒数が取得されます。
6
Blacknet

UTCの日付からタイムスタンプを取得するには、その日付のタイムゾーンと夏時間を考慮する必要があります。たとえば、1月または7月の日付は1時間の差を意味する可能性があります。

以下のオプションはそれを行います。

Date.prototype.getUTCTime = function () {
    return this.getTime() - (this.getTimezoneOffset() * 60000);
};

次のように使用できます。

var date = new Date();
var timestamp = date.getUTCTime();
1
Darlesson