GAS×Math.floorで勤怠管理を効率化!時間計算の丸め処理を徹底解説
勤怠管理システムにおいて、時間の計算は非常に重要です。特に、労働時間の算出や残業時間の計算など、正確な時間管理が求められます。しかし、手動で計算を行う場合、ミスが発生しやすく、時間もかかります。そこで、Google Apps Script(GAS)とMath.floor関数を活用することで、勤怠管理を自動化し、業務効率を大幅に向上させることができます。本記事では、GASのMath.floor関数に焦点を当て、勤怠管理における時間の丸め処理を効率化する方法を解説します。
Math.floor関数の基本
Math.floor関数は、与えられた数値以下の最大の整数を返すJavaScriptの組み込み関数です。GASでもJavaScriptの関数として利用できます。この関数を利用することで、小数点以下の数値を切り捨て、整数値として扱うことができます。勤怠管理においては、分単位の端数を切り捨てて時間単位で管理したい場合などに役立ちます。
Math.floor関数の構文
Math.floor(x)
x:数値
例:
console.log(Math.floor(5.95)); // 出力: 5
console.log(Math.floor(5.05)); // 出力: 5
console.log(Math.floor(-5.05)); // 出力: -6
勤怠管理におけるMath.floorの活用例
勤怠管理システムにおいて、Math.floor関数は様々な場面で活用できます。以下に具体的な例をいくつか紹介します。
例1:労働時間の計算(30分単位で切り捨て)
労働時間を計算する際に、分単位の端数を30分単位で切り捨てたい場合があります。例えば、8時間45分働いた場合、8時間30分として計算したい場合などです。この場合、Math.floor関数を利用して、分単位の端数を切り捨てることができます。
function calculateWorkingHours(startTime, endTime) {
// 開始時間と終了時間の差をミリ秒で計算
const diff = endTime.getTime() - startTime.getTime();
// ミリ秒を時間に変換
let hours = diff / (1000 * 60 * 60);
// 30分単位で切り捨て(例: 8.75時間 -> 8.5時間)
hours = Math.floor(hours * 2) / 2;
return hours;
}
解説:
startTimeとendTimeはDateオブジェクトとして渡されます。- 時間の差をミリ秒で計算し、それを時間に変換します。
hours * 2で時間を0.5時間単位にし、Math.floorで切り捨て、最後に/ 2で元の時間単位に戻します。
例2:残業時間の計算(15分単位で切り捨て)
残業時間を計算する際に、15分単位で切り捨てたい場合があります。例えば、1時間20分残業した場合、1時間15分として計算したい場合などです。
function calculateOvertime(startTime, endTime, regularHours) {
// 通常の労働時間を超えた時間を計算
let overtime = endTime.getTime() - startTime.getTime() - (regularHours * 60 * 60 * 1000);
if (overtime <= 0) {
return 0;
}
// ミリ秒を時間に変換
overtime = overtime / (1000 * 60 * 60);
// 15分単位で切り捨て(例: 1.33時間 -> 1.25時間)
overtime = Math.floor(overtime * 4) / 4;
return overtime;
}
解説:
startTimeとendTimeはDateオブジェクト、regularHoursは通常の労働時間(時間単位)として渡されます。- 通常の労働時間を超えた時間を計算します。
overtime * 4で時間を0.25時間単位にし、Math.floorで切り捨て、最後に/ 4で元の時間単位に戻します。
例3:遅刻時間の計算(1分単位で切り捨て)
遅刻時間を計算する際に、1分単位で切り捨てたい場合があります。例えば、9時1分に出勤した場合、遅刻時間を1分として計算したい場合などです。
function calculateLateTime(scheduledTime, actualTime) {
// 出勤予定時刻と実際に出勤した時刻の差をミリ秒で計算
const diff = actualTime.getTime() - scheduledTime.getTime();
// ミリ秒を分に変換
let lateMinutes = diff / (1000 * 60);
// 1分単位で切り捨て
lateMinutes = Math.floor(lateMinutes);
// 遅刻時間がマイナスの場合は0を返す
return lateMinutes > 0 ? lateMinutes : 0;
}
解説:
scheduledTimeとactualTimeはDateオブジェクトとして渡されます。- 出勤予定時刻と実際に出勤した時刻の差をミリ秒で計算します。
- ミリ秒を分に変換します。
Math.floorで分単位で切り捨てます。- 遅刻時間がマイナスの場合は0を返します。
よくある問題とトラブルシューティング
Math.floor関数を利用する際に、よくある問題とその解決策を以下に示します。
問題1:計算結果が期待通りにならない
原因:Dateオブジェクトの扱いが間違っている、または時間の単位が間違っている可能性があります。
解決策:Dateオブジェクトの形式を確認し、時間の単位(ミリ秒、秒、分、時間)を正しく計算するようにしてください。
問題2:負の数の切り捨てが期待と異なる
原因:Math.floorは、常に与えられた数値以下の最大の整数を返すため、負の数の場合は注意が必要です。
解決策:負の数を扱う場合は、Math.ceil関数(与えられた数値以上の最小の整数を返す)との使い分けを検討してください。必要に応じて、条件分岐で処理を分けることも有効です。
カスタマイズ方法と応用例
Math.floor関数は、様々な方法でカスタマイズできます。以下にいくつかの例を示します。
例1:丸め処理の単位を変更する
上記の例では、30分単位や15分単位で切り捨てを行いましたが、丸め処理の単位は自由に設定できます。例えば、5分単位で切り捨てたい場合は、hours = Math.floor(hours * 12) / 12;のように変更します。
例2:深夜残業の計算に対応する
深夜残業を計算する場合、24時を超える時間の計算が必要になります。この場合、Dateオブジェクトの扱いを工夫する必要があります。例えば、24時を基準にして時間を分割し、それぞれ計算してから合計する方法があります。
function calculateLateNightOvertime(startTime, endTime, regularHours) {
// 深夜残業の時間を計算する
let overtime = endTime.getTime() - startTime.getTime() - (regularHours * 60 * 60 * 1000);
if (overtime <= 0) {
return 0;
}
overtime = overtime / (1000 * 60 * 60);
// 22時から5時までの残業を深夜残業とする
let lateNightOvertime = 0;
if (startTime.getHours() >= 22 || endTime.getHours() <= 5) {
lateNightOvertime = overtime;
}
lateNightOvertime = Math.floor(lateNightOvertime * 4) / 4;
return lateNightOvertime;
}
まとめ
本記事では、GASのMath.floor関数を活用して、勤怠管理における時間の丸め処理を効率化する方法を解説しました。Math.floor関数は、労働時間の計算や残業時間の計算など、様々な場面で役立ちます。ぜひ、本記事で紹介したコード例を参考に、自社の勤怠管理システムを効率化してみてください。

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう