JavaScriptでタイムスタンプを取得するにはどうすればよいですか?
Unixタイムスタンプに似たもの、つまり現在の時刻と日付を表す単一の数値。数値または文字列として。
JavaScriptでタイムスタンプを取得するにはどうすればよいですか?
Unixタイムスタンプに似たもの、つまり現在の時刻と日付を表す単一の数値。数値または文字列として。
回答:
+ new Date()
のような単項演算子は、オブジェクトplus
のvalueOf
メソッドをトリガーし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());
~~(Date.now() / 1000)
Date.now()
+new Data
賢いです、それは他の開発者によって読み取り可能ではありません。Date.now()
より明確であり、他の誰もが何が起こっているかを知っていることを保証します。
小さいのでこれが好きです:
+new Date
私もこれが好きです。なぜなら、それは同じくらい短く、最新のブラウザーと互換性があり、500人を超える人々がより良いと投票したからです。
Date.now()
new Date().getTime()
。幸いなことに、私はより速い解決策がすでに判読可能な解決策です!
new Date().toString()
呼び出されます。
+
から、それを文字列のように出すためにオペレーターは何をしていますか?
JavaScriptはエポック以降のミリ秒数で動作しますが、他のほとんどの言語は秒で動作します。ミリ秒で作業することもできますが、PHPと言う値を渡すとすぐに、PHPネイティブ関数はおそらく失敗します。つまり、ミリ秒ではなく常に秒を使用するようにします。
これにより、UNIXタイムスタンプ(秒単位)が得られます。
var unix = Math.round(+new Date()/1000);
これは、エポックからのミリ秒を示します(UNIXタイムスタンプではありません)。
var milliseconds = new Date().getTime();
Unix timestamp
対Seconds since the Epoch
。これら2つは同じことを意味しているのではないですか?
var time = Date.now || function() {
return +new Date;
};
time();
この回答では、説明付きの複数のソリューションを提供します。
PSが不明な場合は、遠慮なく質問してください。悲しいことに誰かがクレジットを与えずにこれをトップアンサーにマージしました。
迅速で汚れたソリューション:
Date.now() /1000 |0
警告:マジックを実行すると、2038年に壊れて負の数を返す可能性があります
|0
。Math.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
new Date/1e3|0
。
jQueryは、タイムスタンプを取得する独自のメソッドを提供します。
var timestamp = $.now();
(それは(new Date).getTime()
式を実装するだけでなく)
REF: http : //api.jquery.com/jQuery.now/
parseInt
結果の値は常にになるので、の必要はありませんNumber
。
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
+new Date
.. :)に等しい
Date.now()
他のオプションに加えて、dateformat ISOが必要な場合は、直接取得できます
console.log(new Date().toISOString());
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
まとめると、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;
}
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();
まだ見たことのないもの
Math.floor(Date.now() / 1000); // current time in seconds
私がまだ見たことがないもう一つは
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
Date.now() /1000 |0
同じことを行い、以前に回答されました
Math.floor()
にそれを編集しましたが、それはと同じ効果があることを明確にするためだけ|0
です。私はあなたや何かを傷つけたくありませんでした。私はあなたに何らかの方法であなたの答えがすでに存在していることを伝えたかっただけです。与えられたすべての回答を見ると、何らかの方法でフロアに気づくものがあります。
_.now()
は少しやり過ぎだと思います。使用する必要があるLodash機能(この場合はNPMの_.now())のみをインポートすることをお勧めしますが、パッケージを非推奨にして、だけを使用するようにしていDate.now()
ます。
このDate.getTime()
メソッドは少し調整して使用できます。
getTimeメソッドによって返される値は、1970年1月1日00:00:00 UTCからのミリ秒数です。
floor
必要に応じて、結果を1000で除算してUnixタイムスタンプを取得します。
(new Date).getTime() / 1000
このDate.valueOf()
メソッドはと機能的に同等ですDate.getTime()
。これにより、日付オブジェクトで算術演算子を使用して同じ結果を得ることができます。私の意見では、このアプローチは読みやすさに影響します。
new Date().getTime() / 1000
()
した後new Date
と.getTime()
するので/
意志はとにかく数にDateオブジェクトをキャスト。
コードMath.floor(new Date().getTime() / 1000)
はに短縮できますnew Date / 1E3 | 0
。
直接getTime()
呼び出しをスキップして| 0
、Math.floor()
関数の代わりとして使用することを検討してください。また1E3
、同等のものを短くしたものを覚えておくこともお1000
勧めします(1E3
定数として示す場合は、小文字のEよりも大文字のEの方が適しています)。
その結果、次のようになります。
var ts = new Date / 1E3 | 0;
console.log(ts);
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
37 -14 = 23バイト。
Math.floor()
によって|0
このコードがどのように「明確で理解可能」になるか説明してください。に置き換え1000
て1バイト節約するポイントを教えてください1E3
。ばかげてる。不正なコードが表示されます。
今日-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では最も低速です。クロムの結果
ここでマシンでテストを実行できます
テストで使用されるコードは、以下のスニペットに示されています
performance.now()
スタンプの点で最も正確であると想定されているため、テストしていただければ興味深いと思います。
privacy.reduceTimerPrecision
、結果を最も近いミリ秒に丸めるFirefoxの結果である可能性があります。また、デフォルトで有効になっていますが、無効にすることもできます。developer.mozilla.org/en-US/docs/Web/API/Performance/now
の使用を強くお勧めし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をインストールして使用する他の方法を含む詳細については、彼らのドキュメントを参照してください
マイクロ秒の精度のタイムスタンプの場合、次のようになりperformance.now
ます。
function time() {
return performance.now() + performance.timing.navigationStart;
}
これは、たとえば、yield 1436140826653.139
である可能性がありDate.now
ます1436140826653
。
しか使えない
var timestamp = new Date().getTime();
console.log(timestamp);
現在のタイムスタンプを取得します。何もする必要はありません。
以下は、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())));
}
(new (chain (-date) (to-i-s-o-string)))
です。
// 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>
Date.nowをサポートしていないブラウザーであれば、これを使用して現在の日付時刻を取得できます。
currentTime = Date.now() || +new Date()
Date.now
、それを呼び出そうとする前に、実際に存在する(関数である)ことを表明することですcurrentTime = typeof Date.now === "function" ? Date.now() : +new Date()
。
先日、JQuery Cookieのソースコードから、与えられたDateオブジェクトをUnixタイムスタンプに変換する本当にクールな方法を学びました。
次に例を示します。
var date = new Date();
var timestamp = +date;
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でのニーズに対して最も簡単なアプローチであることがわかりました。
これは動作するようです。
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);
}
};
Moment.jsは、JavaScriptの日付を扱う際の多くの苦痛を取り除くことができます。
参照:http : //momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
moment().valueOf()
。私の答えを見てください。
これを書いている時点で、トップの答えは9年前のものであり、それ以来多くのことが変更されています。
Date.now()
これがいくつかの古い(IE9より前の)ブラウザで壊れないことを確実にしたい場合は、次のようにチェックの背後に置くことができます。
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
これは、もちろん秒ではなく、エポック時間からのミリ秒を返します。
より簡単な方法:
var timeStamp=event.timestamp || new Date().getTime();
event
から来たのか知っていますか。答えを書くのではなく、それを解決する方法をよりよく説明する必要があります。お願いします!