JavaScriptのMath.trunc():小数部を除いて差分時間を整数の分に変換する
Math.trunc()で正負の数から小数部を取り除く方法を解説。差分時間を分に変換する実例、引数・戻り値、ブラウザーとNode.jsの実行手順、負のゼロや入力検証の注意点を学べます。
予定との差を秒で受け取り、分単位の整数で表示したい場合があります。たとえば、予定より125秒遅ければ2分、125秒早ければマイナス2分と表示する処理です。
こうした「符号の向きによらず小数部を除く」処理には、Math.trunc()が適しています。この記事では、この関数の基本から、入力検証を備えた差分時間の変換までを説明します。
Math.trunc()の目的と基本動作
Math.trunc()は、与えた数値の小数部を取り除いて整数部を返す静的メソッドです。正数と負数のどちらも、ゼロに近づく方向へ処理します。インスタンスを作らず、Math.trunc(x)の形で呼び出します。MDNのMath.trunc()リファレンス
console.log(Math.trunc(7.8));
console.log(Math.trunc(-7.8));
console.log(Math.trunc(7));期待出力は次のとおりです。
7
-7
7「切り捨て」の方向を明確にする
日本語で「小数点以下を切り捨てる」とだけ説明すると、負数の扱いが曖昧になります。Math.trunc(-7.8)は-7ですが、負の無限大方向へ丸めるMath.floor(-7.8)は-8です。
差分の絶対的な大きさから端数を除きたい場合は、ゼロ方向への処理が合います。一方、負数を含む座標を区画へ割り当てる場合などは、別の丸め方が必要になることがあります。先に業務上のルールを決めてから関数を選びましょう。
動作環境と対応バージョン
確認日は2026年10月16日です。Math.trunc()はブラウザーとNode.jsの両方で使用できます。DOMや外部パッケージには依存しません。
MDNでは、2015年7月以降に主要ブラウザーで広く利用できる機能とされています。ただし、この説明を古いブラウザーまで含む動作保証とは解釈しないでください。MDNの対応状況
本記事のコードは、現行のChrome、Edge、Firefox、Safari、およびNode.js 22以降を対象にします。このNode.jsの指定は記事全体の実行対象であり、Math.trunc()自体の導入バージョンを示すものではありません。Node.jsはV8を利用してJavaScriptを実行します。Node.jsのECMAScript対応の説明
古い環境を対象に含める場合は、次の存在確認も行えます。ただし、存在確認だけで後続コードのすべての構文やAPIへの対応を保証できるわけではありません。
console.log(typeof Math.trunc === "function");対応環境での期待出力はtrueです。
引数・戻り値と特殊な入力
構文はMath.trunc(x)です。
- 引数
xには、整数部を取り出したい数値を渡します。 - 戻り値は
number型です。整数専用の別の型になるわけではありません。 - 元の変数を書き換えず、計算結果を返します。
- 処理は同期的に完了します。
Promiseを返さないため、awaitは不要です。
数値以外の値を渡すと、数値への変換が行われます。たとえば数値を表す文字列も処理できてしまいます。アプリケーション側で数値だけを受け付けたい場合は、呼び出す前に入力を検証します。
負のゼロと数値以外の値
console.log(Math.trunc("8.9"));
console.log(Number.isNaN(Math.trunc("invalid")));
console.log(Math.trunc(Infinity));
console.log(Object.is(Math.trunc(-0.5), -0));
try {
Math.trunc(8n);
} catch (error) {
console.log(error.name);
}期待出力は次のとおりです。
8
true
Infinity
true
TypeErrorNaNや無限大が、通常の整数へ自動的に修復されるわけではありません。また、BigIntはこの関数で処理できません。
-0.5の整数部は-0です。負のゼロが表示に不要なら、後述のように結果がゼロの場合に0を返します。ただし、符号を計算上の情報として扱う用途では、必要性を判断してから正規化してください。
差分秒を整数の分へ変換する
ここでは、正数を予定からの遅れ、負数を予定より早い差分として扱います。125秒を2分、-125秒を-2分へ変換します。
独自関数toWholeMinutes()は、安全な整数で表された秒数だけを受け付ける設計です。小数の秒数、文字列、NaN、無限大を拒否します。これは用途に合わせた制約であり、Math.trunc()そのものの入力制約ではありません。
自己完結したコード
以下をまとめてコピーしてください。外部通信、追加ライブラリー、事前の変数定義は不要です。
(() => {
"use strict";
function toWholeMinutes(seconds) {
if (!Number.isSafeInteger(seconds)) {
throw new TypeError("secondsには安全な整数を指定してください");
}
const minutes = Math.trunc(seconds / 60);
return minutes === 0 ? 0 : minutes;
}
const samples = [125, -125, 59, -59, 60, -60];
for (const seconds of samples) {
console.log(`${seconds}秒 => ${toWholeMinutes(seconds)}分`);
}
console.log(`負のゼロ: ${Object.is(toWholeMinutes(-59), -0)}`);
try {
toWholeMinutes("125");
} catch (error) {
console.log(`${error.name}: ${error.message}`);
}
})();期待出力は次のとおりです。これは仕様に基づいて静的に確認した結果であり、実機で実行した記録ではありません。
125秒 => 2分
-125秒 => -2分
59秒 => 0分
-59秒 => 0分
60秒 => 1分
-60秒 => -1分
負のゼロ: false
TypeError: secondsには安全な整数を指定してください処理を追う
まず入力を検証し、秒数を60で割ります。次にMath.trunc()で分の端数を除きます。最後の条件式は、結果が0または-0なら通常の0へそろえる処理です。
125 / 60と-125 / 60はそれぞれ約2.0833と-2.0833なので、戻り値は2と-2になります。1分未満の差は、正負のどちらも表示上の0にそろえます。
安全な整数の範囲は、両端を含む-9007199254740991から9007199254740991です。範囲外では異なる整数を区別できなくなる場合があります。MDNの安全な整数の説明
ブラウザーとNode.jsで実行する方法
ブラウザーでの実行
現行ブラウザーで空のタブを開き、開発者ツールのConsoleを選びます。「自己完結したコード」のJavaScript全体を貼り付けて実行してください。HTMLファイルや開発サーバーは必要ありません。
出力の末尾にコンソールが式の評価結果としてundefinedを追加表示する場合があります。これはコード中のログとは別の表示です。Consoleが貼り付けを制限している場合は、そのブラウザーの案内に従ってコードを入力してください。
Node.jsでの実行
Node.js 22以降をインストールした環境で、コード全体をUTF-8のtrunc-minutes.jsとして保存します。ターミナルで保存先のフォルダーへ移動し、次のコマンドを実行します。
node --version
node trunc-minutes.js最初のコマンドでバージョンを確認し、次のコマンドでプログラムを実行します。パッケージのインストールは不要です。ファイル名をnodeへ渡す実行方法は、Node.js公式のスクリプト実行ガイドでも説明されています。
失敗例と制約
ビット演算で代用すると値が変わる
小数部を除くために| 0を使うコードを見かけますが、これは符号付き32ビット整数への変換を伴います。大きな値では結果が異なります。
console.log(Math.trunc(3000000000.5));
console.log(3000000000.5 | 0);期待出力は次のとおりです。
3000000000
-1294967296一般的な数値の整数部を取り出す目的なら、意図が直接伝わるMath.trunc()を使うほうが読みやすく、32ビット変換の問題も避けられます。MDNのビット演算に関する注意
表示用の丸めと判定用の値を分ける
差分が-59秒でも表示は0分になります。早着か遅延かを判定する際に、この丸めた結果だけを使うと情報が失われます。元の秒数を保持し、表示用の値だけを変換してください。
また、Math.trunc()は浮動小数点演算で生じた誤差を修復する機能ではありません。金額や厳密な小数計算へ転用する際は、数値の持ち方と端数処理の規則を別途設計する必要があります。
活用事例と実装の改善案
差分秒から整数の分を作る処理は、予定と実績を比較する管理画面や、処理時間の差を簡潔に表示するログに使えます。正負を対称に扱い、端数を表示しないという要件に合う場面で採用してください。
実務では、toWholeMinutes()のような変換関数へ表示規則を集めることを勧めます。画面ごとに直接計算すると、負数の丸め方やゼロ表示がばらつきやすいためです。さらに、秒数の正負が何を意味するかを引数の説明に残すと、後から利用する人も判断しやすくなります。
公式参考資料
Googleの優先するニュース提供元にSEの部屋を追加
Googleで、いつも読みたい情報源を選べます。登録可否はGoogleの画面で確認できます。
候補にSEの部屋が表示されない場合は、まだ追加できません。