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

4159
pupeno 2008-10-21 23:29.

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

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

30 answers

5101
daveb 2008-10-21 23:32.

ショート&スナジー:

+ 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オブジェクトを作成しないため、少し優れています。ただし、シムと最大の互換性が必要ない場合は、「古い」方法を使用してタイムスタンプをミリ秒単位で取得できます

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

539
xer0x 2011-02-18 14:33.

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

+new Date

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

Date.now()
283
Daithí 2011-05-12 12:27.

JavaScriptはエポックからのミリ秒数で動作しますが、他のほとんどの言語は秒で動作します。ミリ秒単位で作業することもできますが、PHPという値を渡すとすぐに、PHPのネイティブ関数が失敗する可能性があります。したがって、確実に、ミリ秒ではなく秒を常に使用します。

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

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

これにより、エポックからのミリ秒(Unixタイムスタンプではない)がわかります。

var milliseconds = new Date().getTime();
152
Staale 2008-10-22 00:05.
var time = Date.now || function() {
  return +new Date;
};

time();
135
GottZ 2012-07-12 21:15.

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


迅速で汚い解決策:

Date.now() /1000 |0

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

Math.floor() 解決:

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

この答えの下のコメントから取られたデレク朕會功夫によるいくつかのオタクの代替案:

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が中断された後、タイムスタンプに対して2項演算を実行する必要がある場合に役立つことがあります。

これも負の値を返しますが、コードを実行しているそのPCのユーザーが、少なくとも前年の12月31日にPCの時計を変更している場合に限ります。


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

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

93
aemkei 2008-10-22 03:00.
var timestamp = Number(new Date()); // current time as number
60
VisioN 2013-03-16 04:19.

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

var timestamp = $.now();

(new Date).getTime()式を実装するだけです)

参照: http://api.jquery.com/jQuery.now/

47
Joaquinglezsantos 2016-01-30 05:08.

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

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

45
Tom Viner 2009-05-01 06:53.

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

43
live-love 2012-09-22 09:12.

まとめると、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;
}
42
Alireza 2017-05-20 18:49.

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

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

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

Date.now(); //return 1495255666921

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

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

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

new Date().getTime();
33
Kamil Kiełczewski 2018-06-28 06:33.

パフォーマンス

今日-2020.04.23選択したソリューションのテストを実行します。Chrome 81.0、Safari 13.1、Firefox75.0のMacOsHigh Sierra10.13.6でテストしました

結論

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

詳細

クロムの結果

あなたはここであなたのマシンでテストを実行することができます

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

function A() {
  return new Date().getTime();
}

function B() {
  return new Date().valueOf();
}

function C() {
  return +new Date();
}

function D() {
  return new Date()*1;
}

function E() {
  return Date.now();
}

function F() {
  return Number(new Date());
}

function G() {
  // this solution returns time counted from loading the page.
  // (and on Chrome it gives better precission)
  return performance.now(); 
}



// TEST

log = (n,f) => console.log(`${n} : ${f()}`);

log('A',A);
log('B',B);
log('C',C);
log('D',D);
log('E',E);
log('F',F);
log('G',G);
This snippet only presents code used in external benchmark

30
Belldandu 2014-03-31 22:18.

まだ見たことがない

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

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

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
27
Salman A 2012-05-03 23:02.

このDate.getTime()方法は、少し調整するだけで使用できます。

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

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

(new Date).getTime() / 1000

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

26
Valentin Podkamennyi 2015-10-15 06:41.

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

直接getTime()呼び出しをスキップして| 0Math.floor()関数の代わりとして使用することを検討してください。に1E3相当するものが短いことも覚えておいてください10001E3定数として示すには、小文字よりも大文字のEが優先されます)。

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

var ts = new Date / 1E3 | 0;

console.log(ts);

22
iter 2015-07-06 14:01.

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

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

これは、たとえば1436140826653.139、をDate.now与えることができますが、を与えるだけ1436140826653です。

21
FullStack 2015-07-14 22:29.

を使用することを強くお勧めし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
Jitendra Pawar 2016-03-16 19:45.

使用できるのは

    var timestamp = new Date().getTime();
    console.log(timestamp);

現在のタイムスタンプを取得します。特別なことをする必要はありません。

20
deepakssn 2013-05-21 23:22.

タイムスタンプを次の形式で生成する簡単な関数を次に示します。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())));
}
20
blueberry0xff 2015-09-30 03:55.

// 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
mr.boyfox 2013-05-09 20:53.

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

currentTime = Date.now() || +new Date()
14
Anoop P S 2013-07-01 20:47.

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

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
14
george 2015-03-11 23:52.

先日、JQuery Cookieのソースコードから、特定のDateオブジェクトをUnixタイムスタンプに変換する非常に優れた方法を学びました。

次に例を示します。

var date = new Date();
var timestamp = +date;
14
Kevin Leary 2015-05-30 03:40.

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

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

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

これがお役に立てば幸いですが、上記の方法でも機能しますが、Node.jsのニーズに対してこれが最も簡単なアプローチであることがわかりました。

14
Ronnie Royston 2015-10-09 16:03.

これはうまくいくようです。

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);
            }
};
14
cenkarioz 2019-05-19 10:43.

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

new Date().toISOString()

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

12
Muhammad Reda 2015-03-30 22:40.

以下のためのlodashとアンダースコアのユーザー、使用_.now

var timestamp = _.now(); // in milliseconds
10
Rimian 2015-03-06 14:33.

Moment.jsは、Javascriptの日付を処理する際の多くの問題を抽象化できます。

見る: http://momentjs.com/docs/#/displaying/unix-timestamp/

moment().unix();
9
Olemak 2017-12-15 00:09.

これを書いている時点で、一番の答えは9歳であり、それ以来多くの変化がありました。特に、ハッキーではないソリューションをほぼ普遍的にサポートしています。

Date.now()

これがいくつかの古い(ie9以前の)ブラウザーで壊れないことを絶対に確信したい場合は、次のようにチェックの後ろに置くことができます:

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

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

Date.nowのMDNドキュメント

8
Vicky Gonsalves 2013-10-26 17:51.

より簡単な方法:

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

Related questions

MORE COOL STUFF

Reba McEntire は、彼女が息子の Shelby Blackstock と共有する「楽しい」クリスマスの伝統を明らかにしました:「私たちはたくさん笑います」

Reba McEntire は、彼女が息子の Shelby Blackstock と共有する「楽しい」クリスマスの伝統を明らかにしました:「私たちはたくさん笑います」

Reba McEntire が息子の Shelby Blackstock と共有しているクリスマスの伝統について学びましょう。

メーガン・マークルは、自然な髪のスタイリングをめぐってマライア・キャリーと結ばれました

メーガン・マークルは、自然な髪のスタイリングをめぐってマライア・キャリーと結ばれました

メーガン・マークルとマライア・キャリーが自然な髪の上でどのように結合したかについて、メーガンの「アーキタイプ」ポッドキャストのエピソードで学びましょう.

ハリー王子は家族との関係を修復できるという「希望を持っている」:「彼は父親と兄弟を愛している」

ハリー王子は家族との関係を修復できるという「希望を持っている」:「彼は父親と兄弟を愛している」

ハリー王子が家族、特にチャールズ王とウィリアム王子との関係について望んでいると主張したある情報源を発見してください。

ワイノナ・ジャッドは、パニックに陥った休暇の瞬間に、彼女がジャッド家の家長であることを認識しました

ワイノナ・ジャッドは、パニックに陥った休暇の瞬間に、彼女がジャッド家の家長であることを認識しました

ワイノナ・ジャッドが、母親のナオミ・ジャッドが亡くなってから初めての感謝祭のお祝いを主催しているときに、彼女が今では家長であることをどのように認識したかを学びましょう.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

スタートレックの50周年を称えるための最良の方法

スタートレックの50周年を称えるための最良の方法

来年は、スペースオペラの最も壮大で野心的なメディアシリーズの50周年を迎えます。しかし、スタートレックはその誇り高い遺産に沿って50歳の誕生日を迎えますか?スタートレックの誕生日を祝う方法はたくさんあります。

更新:合法的な大統領候補は数百万人を怒らせ、美しい女性は苦しむ

更新:合法的な大統領候補は数百万人を怒らせ、美しい女性は苦しむ

(画像提供:ゲッティイメージズ)ドナルド・トランプは、アメリカ合衆国大統領の立候補者となる比類のない外交的洞察力を示し、何百万人もの人々を怒らせ、彼の時代遅れの客体化に対する評価の主要な情報源を失いました。彼が立候補を発表し終える前にパレード。トランプ氏は演説の中で、この国で最も高い役職に選出された場合、米国との南の国境に壁を建設すると述べた一連の声明を発表した。

インターネット上で最も愚かな親ロシアのデマ

インターネット上で最も愚かな親ロシアのデマ

David L. Sternは、ウクライナのキエフを拠点とするフリーランスのライターです。

ディズニーフリークは今、独自の出会い系サイトを持っています

ディズニーフリークは今、独自の出会い系サイトを持っています

オンラインデートに関しては、船長、ベーコン愛好家、ポットヘッド向けに作られたサイトなど、長年にわたって選択できるニッチなサイトがたくさんあります。今、ディズニーファンは彼ら自身のマッチメイキングサイトを通して愛を見つけることができます。

米国のフィギュア スケートは、チーム イベントでの最終決定の欠如に「苛立ち」、公正な裁定を求める

米国のフィギュア スケートは、チーム イベントでの最終決定の欠如に「苛立ち」、公正な裁定を求める

ロシアのフィギュアスケーター、カミラ・バリエバが関与したドーピング事件が整理されているため、チームは2022年北京冬季オリンピックで獲得したメダルを待っています。

Amazonの買い物客は、わずか10ドルのシルクの枕カバーのおかげで、「甘やかされた赤ちゃんのように」眠れると言っています

Amazonの買い物客は、わずか10ドルのシルクの枕カバーのおかげで、「甘やかされた赤ちゃんのように」眠れると言っています

何千人ものAmazonの買い物客がMulberry Silk Pillowcaseを推奨しており、現在販売中. シルクの枕カバーにはいくつかの色があり、髪を柔らかく肌を透明に保ちます。Amazonで最大46%オフになっている間にシルクの枕カバーを購入してください

パデュー大学の教授が覚醒剤を扱った疑いで逮捕され、女性に性的好意を抱かせる

パデュー大学の教授が覚醒剤を扱った疑いで逮捕され、女性に性的好意を抱かせる

ラファイエット警察署は、「不審な男性が女性に近づいた」という複数の苦情を受けて、12 月にパデュー大学の教授の捜査を開始しました。

コンセプト ドリフト: AI にとって世界の変化は速すぎる

コンセプト ドリフト: AI にとって世界の変化は速すぎる

私たちの周りの世界と同じように、言語は常に変化しています。以前の時代では、言語の変化は数年または数十年にわたって発生していましたが、現在では数日または数時間で変化する可能性があります。

SF攻撃で91歳のアジア人女性が殴られ、コンクリートに叩きつけられた

犯罪擁護派のオークランドが暴力犯罪者のロミオ・ロレンゾ・パーハムを釈放

SF攻撃で91歳のアジア人女性が殴られ、コンクリートに叩きつけられた

認知症を患っている 91 歳のアジア人女性が最近、47 番街のアウター サンセット地区でロメオ ロレンゾ パーハムに襲われました。伝えられるところによると、被害者はサンフランシスコの通りを歩いていたところ、容疑者に近づき、攻撃を受け、暴行を受けました。

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

メリック・ガーランドはアメリカに失敗しましたか?

バイデン大統領の任期の半分以上です。メリック・ガーランドは何を待っていますか?

メリック・ガーランドはアメリカに失敗しましたか?

人々にチャンスを与えることは、人生で少し遅すぎると私は信じています。寛大に。

Language