1. 概要(Purpose / Scope)

本ページでは、時間電卓の計算仕様(アルゴリズム・丸め・差分)検証方法を公開します。対象は「残業」「勤務時間」「タイムシート」「丸め」「時刻差分」「小数時間変換」です。時間表記は HH:MMH:MM:SS を基本とし、単位は H(時間)・M(分)・S(秒)・D(日)を扱います。

2. 入力仕様(Input Specification)

3. 正規化と内部表現(Normalization)

内部演算はすべて整数の秒で行い、浮動小数点誤差を回避します。

// 擬似コード:H:MM:SS → 秒
function parseHmsToSeconds(s):
  t = normalizeToHalfWidth(s).trim()
  sign = (+1 or -1)         // 先頭の +/- (省略時 +1)
  [H, M, S] = coerceParts(t) // 欠損は 0 で補完
  assert 0 <= M < 60 and 0 <= S < 60
  return sign * (H*3600 + M*60 + S)

注:演算(加減算)→単位変換→表示の順で処理します(詳細は「4. 演算の順序」)。

4. 演算の順序(Order of Operations)

入力(実働)所定丸め設定差分→丸め→集計丸め→差分→集計
8:078:0015分・切上げ差分 0:07 → 丸め 0:15実働 8:15 → 差分 0:15
7:538:0015分・切捨て差分 -0:07 → 丸め 0:00実働 7:45 → 差分 -0:15

5. 丸めルール(Rounding)

// 擬似コード:分単位の丸め
function roundByMinutes(sec, unitMin, mode):
  unitSec = unitMin * 60
  q = sec / unitSec
  if mode == 'ceil'  return ceil(q)  * unitSec
  if mode == 'floor' return floor(q) * unitSec
  if mode == 'half'  return round(q) * unitSec  // 四捨五入(half-up)

6. 時刻差分(勤務時間の算出)

7. 残業の算出(差分の定義)

注意:労務・給与の最終判断は各組織の就業規則に従ってください。詳細は 免責事項 をご参照ください。

8. 単位変換と表示(Output)

9. エラーハンドリング

10. 性能・安全性

11. データ保存とプライバシー

12. 品質保証(Testing Methodology)

代表テストケース(例)

ID入力設定期待出力
T-0018:00 + 0:45 − 1:00単位=H:MM:SS7:45
T-002出勤 23:00 / 退勤 07:00 / 休憩 1:00翌日またぎ7:00
T-003実働 8:07 / 所定 8:00丸め=15分・切上げ差分→丸め=0:15

13. 既知の制約・限界

14. 再現手順(Reproducibility)

本ページの仕様は公開テストケースで再現可能です。将来的にテスト用のCSV(入力→期待出力)を配布し、誰でも検証できる形を提供します。

// 簡易サンプル:往復変換の恒等性
assert formatHMS(parseHmsToSeconds("2:30:15")) == "2:30:15"

15. 変更履歴

16. 参考資料