23

この質問はすでに出されていると思われるかもしれませんが、そうではないと思います。私が読んだすべてのソリューションには、この「ジグソーパズル」テクニックがありました(のようにgetUTCMonth() + getUTCMinutes + ...)。しかし、2 つの UTC (!) 日付間の経過秒数を比較したいだけなので、これは当てはまりません。

誰もが知っているように、次の方法で現在の (UTC 以外の) 日付を取得できます。

var d = new Date();
var t_millis = d.getTime();

しかし、これは私が望むものではありません。現在のシステム日付を UTCミリ秒単位で取得したいので、文字列をいじらないでください。私の知る限り、変数t_millisにはUTCではなくGMTで現在のタイムスタンプのミリ秒値が含まれます。(dGMTにもあるので。getTime()が一種の暗黙的なタイムゾーン変換を行わない限り、つまり、ミリ秒を与える前にオフセットを追加しますが、私はそれについてどこにも読んだことがありません)

では、時間値にオフセットを追加する以外に本当に方法はありませんか? getUTCTimeMillis()他の言語で知られているような機能がどうしても欠けています。

4

5 に答える 5

19

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

つまり、返される値getTime() UTC 相対タイムスタンプです。地球上の大きく異なる場所にある 2 つの Web ブラウザーが同時に Date オブジェクトを作成した場合、どちらも同じ値を取得します.getTime()(クロックが同期されていると仮定すると、もちろん可能性はほとんどありません)。

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

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

于 2012-06-01T21:09:10.007 に答える
7

どうですか:

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())
于 2013-01-03T17:12:25.357 に答える
6

この機能を使用して問題を解決しました。

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 から経過したミリ秒数が得られます。
于 2015-12-09T15:23:44.323 に答える