JavaScriptでタイムスタンプを取得するにはどうすればよいですか?


4015

JavaScriptでタイムスタンプを取得するにはどうすればよいですか?

Unixタイムスタンプに似たもの、つまり現在の時刻と日付を表す単一の数値。数値または文字列として。


JSで64ビットのタイムスタンプを取得する方法は?
Alexander Mills

@AlexanderMills JavaScriptは64ビット整数をサポートしていないため、2つの32ビット整数を取得する必要があります。別の質問をします。
wizzwizz4

回答:


4914

ショート&スナジー:

+ new Date()

のような単項演算子は、オブジェクトplusvalueOfメソッドをトリガーしDate、タイムスタンプを返します(変更なし)。

詳細:

現在のほとんどすべてのブラウザDate.now()で、ミリ秒単位の UTCタイムスタンプを取得できます。これに対する注目すべき例外はIE8以前です(互換性の表を参照)。

ただし、このためのシムは簡単に作成できます。

if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}

秒単位のタイムスタンプを取得するには、次を使用できます。

Math.floor(Date.now() / 1000)

または、代わりに次を使用することもできます。

Date.now() / 1000 | 0

どちらかが少し速いはずですが、読みにくくなります(この回答参照してください)。

Date.now()(互換性シムを使用して)使用することをお勧めします。短く、新しいDateオブジェクトを作成しないため、少し良いです。ただし、shimと最大の互換性が必要ない場合は、「古い」メソッドを使用して、ミリ秒単位のタイムスタンプを取得できます

new Date().getTime()

その後、次のように秒に変換できます。

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

また、valueOf上記で示した方法を使用することもできます。

new Date().valueOf()

ミリ秒単位のタイムスタンプ

var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();

console.log(timeStampInMs, Date.now());


11
もう1つの注目すべき例外は、node.jsです。私はノードから同じことをするためにGoogleからここに来ました
MilanBabuškov15年

57
2038年問題にDate.now() / 1000 | 0悩まされませんか?new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
ゲンケフ2015年

3
あるいは、W / Math.floor ..使用してO~~(Date.now() / 1000)
マテイ

14
@MilanBabuškovですが、node.jsはサポートしていますDate.now()
OrangeDog

51
一方で+new Data賢いです、それは他の開発者によって読み取り可能ではありません。Date.now()より明確であり、他の誰もが何が起こっているかを知っていることを保証します。
ハリーサドラー

514

小さいのでこれが好きです:

+new Date

私もこれが好きです。なぜなら、それは同じくらい短く、最新のブラウザーと互換性があり、500人を超える人々がより良いと投票したからです。

Date.now()

636
このオプションは悪い考えです。それは見落とされやすく、タイプミスのように見え、実際には言語の副作用に依存しています。不正なコードが表示されます。
inanutshellus 2012年

10
@Billy思い出すと、提案された2つのソリューションのタイムスタンプをそれぞれ100万回計算し、平均実行時間を計算しました。私はそれをFirefoxとChromeで実行しましたが、getTimeはどちらのブラウザーでも高速でした。そうは言っても、たとえ(わずかに)遅くても、私は選択しますnew Date().getTime()。幸いなことに、私はより速い解決策がすでに判読可能な解決策です!
inanutshellus 2013

11
@FabrícioMattéに同意します。単項演算子の動作は初歩的ではないかもしれませんが、それをブラッシュアップしていない場合は、多くのチームで効果的に機能できると期待しないでください。
ジェイソンTフェザリンガム2013

9
@Niklausそれはあなたがそれを別の文字列に連結しているからです。その場合、new Date().toString()呼び出されます。
Kirb 2013年

7
好奇心+から、それを文字列のように出すためにオペレーターは何をしていますか?
zadubz 2014

276

JavaScriptはエポック以降のミリ秒数で動作しますが、他のほとんどの言語は秒で動作します。ミリ秒で作業することもできますが、PHPと言う値を渡すとすぐに、PHPネイティブ関数はおそらく失敗します。つまり、ミリ秒ではなく常に秒を使用するようにします。

これにより、UNIXタイムスタンプ(秒単位)が得られます。

var unix = Math.round(+new Date()/1000);

これは、エポックからのミリ秒を示します(UNIXタイムスタンプではありません)。

var milliseconds = new Date().getTime();

4
PHPはそれ自体をmicrotime()関数で使用するため、ミリ秒でも問題なく動作するはずです。
ニコ・バーンズ

5
microtime()が存在する場合、phpのほとんどの時間関連関数は、タイムスタンプがミリ秒ではなく秒であることを期待します。さらに、microtime()は浮動小数(trueを渡した場合)を返し、小数部は秒の小数部(マイクロ秒に正確)ですが、newDate()。getTime()はintを返します。エポック。たとえば、(php)floor(microtime(true))を呼び出すと、これはマイクロ秒やミリ秒ではなく秒単位のtime()を呼び出すことと実質的に同じになります。上記のように1000で除算することは、これに対する最も簡単な解決策です。
gregghz

49
円形ではなく、床を使用します。700ミリ秒はまだ1秒ではありません
Anagmate

Unix timestampSeconds since the Epoch。これら2つは同じことを意味しているのではないですか?
Mudiaga Ejenavi

147
var time = Date.now || function() {
  return +new Date;
};

time();

6
なぜ|| オペレーター?Date.now()はすべてのブラウザーで使用できるわけではありませんか?
Chris Noe、

67
Date.now()はJavaScript 1.5からのものであり、IE 8ではサポートされていません。
SørenLøvborg

9
Date.nowメソッドをサポートするように更新されていないエンジンは、次のシムを使用して、このメソッドの不在を回避できます。}; }
Quested Aronssonによる2012年

または(Date.now||function(){return +new Date})();

130

この回答では、説明付きの複数のソリューションを提供します。
PSが不明な場合は、遠慮なく質問してください。悲しいことに誰かがクレジットを与えずにこれをトップアンサーにマージしました。


迅速で汚れたソリューション:

Date.now() /1000 |0

警告:マジックを実行すると、2038年に壊れて負の数を返す可能性があります|0Math.floor()その時間までに代わりに使用してください

Math.floor() 解決:

Math.floor(Date.now() /1000);

この回答の下のコメントから抜粋したDerek會功夫によるオタクの代替案:

new Date/1e3|0

機能させるためのポリフィルDate.now()

IEで機能させるには、次のようにします(MDNの Polyfill )。

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

年/曜日/夏時間を気にしない場合は、それを取り除き、2038年以降にこれを使用できます。

var now = (function () {
    var year = new Date(new Date().getFullYear().toString()).getTime();
    return function () {
        return Date.now() - year
    }
})();

それがどのように見えるかのいくつかの出力:

new Date()
Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit )
new Date(now())
Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )

もちろんそれは夏時間を壊しますが、何を構築しているかによっては、2038年にint32が機能しなくなった後、タイムスタンプにバイナリ演算を実行する必要がある場合に便利です。

これも負の値を返しますが、コードを実行しているそのPCのユーザーがPCのクロックを少なくとも昨年の12月31日に変更している場合のみです。


コードが最初に実行された時点からの相対時間だけを知りたい場合は、次のようなものを使用できます。

var relativeTime = (function () {
    var start = Date.now();
    return function () {
        return Date.now() - start
    }
})();

jQueryを使用し$.now()ている場合は、jQueryのドキュメントに記載されているように使用できます。これにより、$.now()内部で同じ処理が行われるため、ポリフィルが不要になります。(new Date).getTime()

jQueryのバージョンに満足している場合は、私が自分で見つけられなかったため、この回答を賛成することを検討してください。


次に、何|0が行われるかについての小さな説明:

を提供することにより|、インタープリターにバイナリOR演算を実行するように指示します。ビット演算には、10進数の結果をDate.now() / 1000整数に変換する絶対数が必要です。

その変換中に小数が削除され、使用するのと同じ結果にMath.floor()なりますが、使用するコードは少なくなります。

ただし、64ビットのdoubleを32ビットの整数に変換します。これにより、膨大な数を処理するときに情報が失われます。32ビット整数のオーバーフローが原因で、2038年以降にタイムスタンプが壊れます。


詳細についてDate.nowは、このリンクをたどってください:Date.now()@ MDN


12
| 0はビット演算(フロートでは機能しない)であるため、Math.floor()に似ています。関数呼び出しではないため、通常はMath.floor()よりも高速であり、ネイティブのJavaScript演算子です。
GottZ 2012


@Christopheなぜあなたはそれを思いますか?IEの修正のため?その部分を除いて、かなりシンプルでカスタマイズ可能だと思います。
GottZ

5
ポリフィル/シムは複雑ではありません。これらは、9つの異なるブラウザーバージョンをサポートする必要があり、業界が採用している標準と作成している標準を選択することを決定した結果です。
rlemon 2013

8
参考までに、最もコンパクトなのはですnew Date/1e3|0
Derek━會功夫2014年


61

jQueryは、タイムスタンプを取得する独自のメソッドを提供します。

var timestamp = $.now();

(それは(new Date).getTime()式を実装するだけでなく)

REF: http : //api.jquery.com/jQuery.now/


2
jQueryは、さまざまなJavaScript APIとのブラウザー間の互換性の問題にも対応します。
Henry Heleine 14

4
@VisioN Node.jsでタイムスタンプを作成する方法を探しました。StackoverflowでJavaScriptの質問を見つけましたが、jQueryで回答が得られましたが、役に立ちません。JavaScriptとjQueryは2つです。そこにあるすべてのjavascriptフレームワークに答えを与えると、おそらく無限の答えが返されます。これは、stackoverflowでのQ / Aの哲学に反します。また、i.stack.imgur.com / Ledgt.gif:D
Pierre Arlaud

5
@VisioNブラウザでJavaScriptを使用する必要があると誰が言ったのですか。
Pierre Arlaud、2015年

5
@PierreArlaudそして、この質問はNodeJSのみに関するものだと誰が言ったのですか?
VisioN 2015

2
@KingRider parseInt結果の値は常にになるので、の必要はありませんNumber
VisioN 2016

46

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch


4
これは+new Date.. :)に等しい
19

8
ただやるDate.now()
オーランド

@Orlandoは他の回答を参照してください。now()の問題はブラウザのサポートです
Christophe

@Christopheは単純なポリフィルを実行します、developer.mozilla.org
Orlando

4
@Orlando正確に言うと、Date.now()を実行するだけではありません
Christophe

43

他のオプションに加えて、dateformat ISOが必要な場合は、直接取得できます

console.log(new Date().toISOString());


それは質問が尋ねられると整数を返しません!
alexventuraio 2016

文字列dateformat ISOで@AlexVenturaを使用すると、日付オブジェクトをインスタンス化して、それらを減算できます。例:new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Joaquinglezsantos

41

まとめると、JavaScriptでタイムスタンプ文字列を返す関数です。例:15:06:38 PM

function displayTime() {
    var str = "";

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    var seconds = currentTime.getSeconds()

    if (minutes < 10) {
        minutes = "0" + minutes
    }
    if (seconds < 10) {
        seconds = "0" + seconds
    }
    str += hours + ":" + minutes + ":" + seconds + " ";
    if(hours > 11){
        str += "PM"
    } else {
        str += "AM"
    }
    return str;
}

11
OPは整数のタイムスタンプについて尋ねています。これは時間の文字列表現です。
Brad Koch

3
「Unixのタイムスタンプと同様、つまり現在の時刻を表す単一の数値」
Brad Koch

時間を表示するコードがありましたが、オーストラリアの一部で完全な日付が表示されていました。このスクリプトを使用すると、時間を分解して正しく表示できます。(そのための+1)
Syfer 2018

40

JavaScriptのネイティブオブジェクトであるDateは、時間に関するすべてのデータを取得する方法です。

JavaScriptでは、タイムスタンプがクライアントコンピュータセットに依存するため、100%正確なタイムスタンプではないことに注意してください。最良の結果を得るには、サーバー側からタイムスタンプを取得する必要があります

とにかく、私の好ましい方法はバニラを使用することです。これは、JavaScriptで行う一般的な方法です。

Date.now(); //return 1495255666921

MDNでは、次のように記載されています。

Date.now()メソッドは、1970年1月1日00:00:00 UTCから経過したミリ秒数を返します。
now()はDateの静的メソッドであるため、常にDate.now()として使用します。

ES5より前のバージョンを使用している場合Date.now();は機能せず、以下を使用する必要があります。

new Date().getTime();

29

まだ見たことのないもの

Math.floor(Date.now() / 1000); // current time in seconds

私がまだ見たことがないもう一つは

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();

1
Date.now() /1000 |0同じことを行い、以前に回答されました
GottZ

3
上手。私は確かMath.floor()にそれを編集しましたが、それはと同じ効果があることを明確にするためだけ|0です。私はあなたや何かを傷つけたくありませんでした。私はあなたに何らかの方法であなたの答えがすでに存在していることを伝えたかっただけです。与えられたすべての回答を見ると、何らかの方法でフロアに気づくものがあります。
GottZ

使用するためだけにLodashライブラリ全体をインポートするの_.now()は少しやり過ぎだと思います。使用する必要があるLodash機能(この場合はNPMの_.now())のみをインポートすることをお勧めしますが、パッケージを非推奨にして、だけを使用するようにしていDate.now()ます。
mgthomas99

27

このDate.getTime()メソッドは少し調整して使用できます。

getTimeメソッドによって返される値は、1970年1月1日00:00:00 UTCからのミリ秒数です。

floor必要に応じて、結果を1000で除算してUnixタイムスタンプを取得します。

(new Date).getTime() / 1000

このDate.valueOf()メソッドはと機能的に同等ですDate.getTime()。これにより、日付オブジェクトで算術演算子を使用して同じ結果を得ることができます。私の意見では、このアプローチは読みやすさに影響します。


7
あなたは、括弧は必要ありません:new Date().getTime() / 1000
Ry-

14
それらは必要ありませんが、コードを読みやすくします(IMHO)。味の問題だと思います。
johndodo 2012

あなたも必要ありません()した後new Date.getTime()するので/意志はとにかく数にDateオブジェクトをキャスト。
デレク━會功夫2014年

25

コードMath.floor(new Date().getTime() / 1000)はに短縮できますnew Date / 1E3 | 0

直接getTime()呼び出しをスキップして| 0Math.floor()関数の代わりとして使用することを検討してください。また1E3、同等のものを短くしたものを覚えておくこともお1000勧めします(1E3定数として示す場合は、小文字のEよりも大文字のEの方が適しています)。

その結果、次のようになります。

var ts = new Date / 1E3 | 0;

console.log(ts);


3
@dchest "Math.floor(new Date().getTime()/1000)".length == 37; "new Date/1E3|0".length == 14; 37 -14 = 23バイト。
Valentin Podkamennyi 2016

@MatthieuCharbonnier正確に何が読めないのですか?除算記号、1E3、パイプまたはゼロ?上記の私の答えのコードスニペットをご覧ください。
Valentin Podkamennyi 2017年

1
@Valentin単純なコードを縮小/複雑化して、ほとんどメリットがありません。それをする意味がわかりません。私たちはコードゴルフに参加していません!
Matthieu Charbonnier 2017年

@MatthieuCharbonnier、基本的な構文と演算子だけで、複雑なものはありません。主なポイントは、短くて明確で理解可能なコードを書くことです。
Valentin Podkamennyi 2017年

2
@Valentin置換Math.floor()によって|0このコードがどのように「明確で理解可能」になるか説明してください。に置き換え1000て1バイト節約するポイントを教えてください1E3。ばかげてる。不正なコードが表示されます。
Matthieu Charbonnier 2017年

24

パフォーマンス

今日-2020.04.23選択したソリューションのテストを実行します。MacOs High Sierra 10.13.6 on Chrome 81.0、Safari 13.1、Firefox 75.0でテストしました

結論

  • ソリューションDate.now()(E)はChromeとSafariで最も高速で、Firefoxで2番目に高速であり、これはおそらく高速なクロスブラウザソリューションに最適です。
  • performance.now()驚くべきことに、ソリューション(G)は、Firefoxの他のソリューションよりも100倍以上高速ですが、Chromeでは最も低速です。
  • ソリューションC、D、Fはすべてのブラウザーで非常に遅い

ここに画像の説明を入力してください

詳細

クロムの結果

ここに画像の説明を入力してください

ここでマシンでテストを実行できます

テストで使用されるコードは、以下のスニペットに示されています


performance.now()スタンプの点で最も正確であると想定されているため、テストしていただければ興味深いと思います。
SamsonTheBrave

@SamsonTheBraveコメントへの感謝-回答を更新
KamilKiełczewski

素晴らしい、更新ありがとうございます!私は、Firefoxでのパフォーマンスが今や速度に差があることに気づきました。これはprivacy.reduceTimerPrecision、結果を最も近いミリ秒に丸めるFirefoxの結果である可能性があります。また、デフォルトで有効になっていますが、無効にすることもできます。developer.mozilla.org/en-US/docs/Web/API/Performance/now
SamsonTheBrave

22

の使用を強くお勧めしmoment.jsます。UNIXエポックからのミリ秒数を取得するには、次のようにします。

moment().valueOf()

UNIXエポックからの秒数を取得するには、次のようにします。

moment().unix()

次のように時間を変換することもできます:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()

私はいつもそうしています。しゃれは意図されていません。

moment.jsブラウザで使用するには:

<script src="moment.js"></script>
<script>
    moment().valueOf();
</script>

MomentJSをインストールして使用する他の方法を含む詳細については、彼らのドキュメントを参照してください


21

マイクロ秒の精度のタイムスタンプの場合、次のようになりperformance.nowます。

function time() { 
  return performance.now() + performance.timing.navigationStart;
}

これは、たとえば、yield 1436140826653.139である可能性がありDate.nowます1436140826653



20

以下は、mm / dd / yy hh:mi:ssの形式でタイムスタンプを生成する簡単な関数です。

function getTimeStamp() {
    var now = new Date();
    return ((now.getMonth() + 1) + '/' +
            (now.getDate()) + '/' +
             now.getFullYear() + " " +
             now.getHours() + ':' +
             ((now.getMinutes() < 10)
                 ? ("0" + now.getMinutes())
                 : (now.getMinutes())) + ':' +
             ((now.getSeconds() < 10)
                 ? ("0" + now.getSeconds())
                 : (now.getSeconds())));
}

10
@ b123400-Lispバージョンは次のとおり(new (chain (-date) (to-i-s-o-string)))です。
イナイマティ2013

20

// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)

// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720

// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087

// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


16

Date.nowをサポートしていないブラウザーであれば、これを使用して現在の日付時刻を取得できます。

currentTime = Date.now() || +new Date()

3
(私のコメントを言い換えると)コードに問題があります。コードのサポートを最初にチェックする代わりに、Date.nowメソッドを実行します。古いブラウザでは、Date.nowは関数エラーではありません
Salman A

おそらく、より良い代替策は、3項演算子を使用してDate.now、それを呼び出そうとする前に、実際に存在する(関数である)ことを表明することですcurrentTime = typeof Date.now === "function" ? Date.now() : +new Date()
mgthomas99

14

これには解決策があります:jsでunixtimeスタンプをtimに変換するこれを試してください

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();

14

先日、JQuery Cookieのソースコードから、与えられたDateオブジェクトをUnixタイムスタンプに変換する本当にクールな方法を学びました。

次に例を示します。

var date = new Date();
var timestamp = +date;

新しいDate()オブジェクトを書き込もうとしていました。コンソールlog(new Date())を実行してから、関連するメソッドを新しいDate()オブジェクト/関数の下で
読み飛ばすことができ

14

Node.jsでタイムスタンプを生成する基本的な方法が必要な場合、これはうまく機能します。

var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

私たちのチームはこれを使用して、ローカルホスト環境でキャッシュを無効化しています。出力は/dist/css/global.css?v=245521377245521377によって生成されたタイムスタンプhrtime()です。

うまくいけば、これが役に立てば、上記のメソッドも機能することができますが、Node.jsでのニーズに対して最も簡単なアプローチであることがわかりました。


13

これは動作するようです。

console.log(clock.now);
// returns 1444356078076

console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16

console.log(clock.format(clock.now + clock.add(10, 'minutes'))); 
//returns 10/8/2015 21:08:18

var clock = {
    now:Date.now(),
    add:function (qty, units) {
            switch(units.toLowerCase()) {
                case 'weeks'   :  val = qty * 1000 * 60 * 60 * 24 * 7;  break;
                case 'days'    :  val = qty * 1000 * 60 * 60 * 24;  break;
                case 'hours'   :  val = qty * 1000 * 60 * 60;  break;
                case 'minutes' :  val = qty * 1000 * 60;  break;
                case 'seconds' :  val = qty * 1000;  break;
                default       :  val = undefined;  break;
                }
            return val;
            },
    format:function (timestamp){
            var date = new Date(timestamp);
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var day = date.getDate();
            var hours = date.getHours();
            var minutes = "0" + date.getMinutes();
            var seconds = "0" + date.getSeconds();
            // Will display time in xx/xx/xxxx 00:00:00 format
            return formattedTime = month + '/' + 
                                day + '/' + 
                                year + ' ' + 
                                hours + ':' + 
                                minutes.substr(-2) + 
                                ':' + seconds.substr(-2);
            }
};

13

ロギング目的の場合は、ISOStringを使用できます

new Date().toISOString()

「2019-05-18T20:02:36.694Z」




9

これを書いている時点で、トップの答えは9年前のものであり、それ以来多くのことが変更されています。

Date.now()

これがいくつかの古い(IE9より前の)ブラウザで壊れないことを確実にしたい場合は、次のようにチェックの背後に置くことができます。

const currentTimestamp = (!Date.now ? +new Date() : Date.now());

これは、もちろん秒ではなく、エポック時間からのミリ秒を返します。

Date.nowのMDNドキュメント


8

より簡単な方法:

var timeStamp=event.timestamp || new Date().getTime();

どこeventから来たのか知っていますか。答えを書くのではなく、それを解決する方法をよりよく説明する必要があります。お願いします!
alexventuraio 2016

新しいDate()オブジェクトを書き込もうとしていました
。log
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.