1. ホーム
  2. javascript

JavaScriptで時間を四捨五入する方法は?

2023-10-18 07:25:07

質問

例えば

Given time: 08:22 => Rounded to: 08:15

Given time: 08:23 => Rounded to: 08:30

かなり単純なはずです。しかし、私が作ることができたのは、問題を解決するための長くてあまり良くないコードだけです。頭が真っ白になりました。

掲示板

どのように解決するのですか?

変数に時間と分が入っているとします(入っていない場合は Date インスタンスから取得できます。 Date インスタンス 機能 ):

var m = (parseInt((minutes + 7.5)/15) * 15) % 60;
var h = minutes > 52 ? (hours === 23 ? 0 : ++hours) : hours;

分単位で計算することもできます。 Math.round() :

var m = (Math.round(minutes/15) * 15) % 60;

または、関数を使わない、よりjavascriptに洗練された表現で行います。

var m = (((minutes + 7.5)/15 | 0) * 15) % 60;
var h = ((((minutes/105) + .5) | 0) + hours) % 24;

jsPerfのテストで確認できるのは Math.round() は3つのうち最も遅く、最後のものは関数呼び出しのない単なる式であるため最も速いことがわかります(関数呼び出しのオーバーヘッド、つまりスタック操作がない。ただし、ネイティブ関数はJavascript VMでは異なる扱いになるかもしれません)。 //----