Javascriptで経過時間を計測する
Javascriptの処理のパフォーマンスを計測したり、あるいはタイマーみたいな機能を実装する際に、ある時点からの経過時間や経過日数を計測したいということがあると思います。
今回はその方法をまとめます。
Date オブジェクトと getTime 関数
Javascriptで日付を扱うには Date
オブジェクトを利用します。Date
オブジェクトは getTime
関数を持っており、これは日付データを 1970/01/01 00:00:00.000 からの 通算ミリ秒(経過ミリ秒) で返してくれます。これを使うことで、ある日付からの経過ミリ秒を取得できます。
経過日数を計算する
例えば、2016/2/1 ~ 2016/3/1 までの経過日数を取得するには次のようにします。
var from = new Date("2016/2/1");
var to = new Date("2016/3/1");
// 経過時間をミリ秒で取得
var ms = to.getTime() - from.getTime();
// ミリ秒を日付に変換(端数切捨て)
var days = Math.floor(ms / (1000*60*60*24));
console.log(days); // 29
2016年はうるう年なので、2月は29日まで存在します。ただしく29日経過したと取得されていることがわかります。
端数の処理は Math.floor
関数で切り捨てていますが、必要に応じた処理をするとよいでしょう。
処理時間を秒数で計測する
例えばある処理についての処理速度を計測したい場合、次のようにして、処理速度を測りたい前後で Date
オブジェクトを初期化してやるとよいです。
後は同じようにミリ秒で経過時間を取得し、秒数にしたければ 1000 で割ってやればよいです。
var start = new Date();
// 1億回ループ
for (var i=0; i < 100000000; i++) {
// 何もしない
}
var stop = new Date();
// 経過時間をミリ秒で取得
var ms = stop.getTime() - start.getTime();
var s = ms / 1000
console.log("処理時間: " + s + "秒");
1970/1/1 以前の日付について
getTime()
関数は 1970/1/1 からの経過時間をミリ秒で返します。では、1970年より前の日付についてはどのように扱えばよいでしょうか。
getTime()
関数は 1970年より前の日付については、負の数を返します。ただ経過時間の計測には大きく影響しません。正しい計算をすればマイナスの値ではなくプラスの経過時間等が得られます。
以下、一例です。
var from = new Date("1950/2/1");
var to = new Date("1950/3/1");
var ms = to.getTime() - from.getTime();
var days = Math.floor(ms / (1000*60*60*24));
console.log(days); // 28
以上。
コメントを書く