1. 概要(Purpose / Scope)
本ページでは、時間計算における主な時間差計算機能の計算仕様と検証方法を公開します。現在のホームページの主要ツールは、開始時刻・終了時刻・休憩時間をもとに、経過時間を求める電卓です。
このページの目的は、計算結果がどのようなロジックで導かれるか、どのような入力を受け付けるか、どのような条件でエラーになるか、どのように検証しているかを利用者に明示し、透明性と信頼性を高めることにあります。
なお、残業電卓、勤務時間電卓、丸め電卓、タイムシート電卓などの個別ツールでは、ページごとに追加ルールや個別設定が適用される場合があります。本ページでは、特にホームページ上の時間差計算ツールを中心に説明します。
2. 対象機能(Target Functionality)
- 開始時刻の入力:計算開始の基準となる時刻を入力します。
- 終了時刻の入力:計算終了の基準となる時刻を入力します。
- 休憩時間の入力:必要な場合のみ、経過時間から差し引く休憩時間を指定できます。
- 経過時間の算出:入力値をもとに、実際の経過時間を計算します。
- 翌日またぎの処理:終了時刻が開始時刻より早い場合は、翌日にまたがる計算として扱います。
- 表示切替:結果を H:MM:SS、時間、分、秒などの形式で表示できます。
3. 入力仕様(Input Specification)
- 開始時刻・終了時刻:通常は 24 時間表記の時刻として扱います。
- 休憩時間:任意入力です。未入力の場合は 0 として扱います。
- 有効範囲:時・分・秒は、UIで許可された範囲内の値を対象とします。
- 空入力:必須項目が未入力の場合は計算せず、エラーとして扱います。
- 不正値:形式不正、数値以外、範囲外の値はエラーとして扱います。
実際の入力UIはページやデバイスによって異なる場合がありますが、計算ロジック上は、開始時刻と終了時刻を比較可能な時刻データとして受け取り、休憩時間を差し引く構造になっています。
4. 計算ロジック(Calculation Logic)
内部演算は、時刻や時間を比較しやすい単位に変換して行います。基本的な考え方は次のとおりです。
// 擬似コード:経過時間の算出
function calculateElapsed(start, end, breakDuration):
startValue = convertTimeToSeconds(start)
endValue = convertTimeToSeconds(end)
breakValue = convertDurationToSeconds(breakDuration || 0)
if endValue < startValue:
endValue = endValue + 24 * 60 * 60
elapsed = endValue - startValue - breakValue
return elapsed
基本式は 経過時間 = 終了時刻 - 開始時刻 - 休憩時間 です。必要に応じて翌日またぎを考慮し、その後に結果を表示用の形式へ変換します。
注:ホームページの主要ツールは、旧来の「時間の足し算・引き算の履歴計算」を中心とした構造ではなく、時刻差の算出を中心とした設計です。
5. 翌日またぎの扱い(Overnight Handling)
終了時刻が開始時刻より早い場合、同日の逆転入力ではなく、翌日にまたがる計算として扱います。これは、夜勤や深夜勤務、日付をまたぐ作業時間を自然に計算できるようにするためです。
- 例:開始時刻
22:00、終了時刻06:00→ 翌日扱い - この場合、終了時刻に 24 時間を加えたものとして差分を求めます。
- 休憩時間が指定されている場合は、その後に差し引きます。
この処理により、終了時刻が単純に開始時刻より小さい場合でも、利用者が意図する「日付をまたいだ勤務・作業」の計算結果を得やすくしています。
6. 休憩時間の扱い(Break Handling)
- 休憩時間は任意入力:入力がない場合は差し引きなしとして扱います。
- 差し引きのタイミング:開始時刻と終了時刻の差を求めたあとに、休憩時間を控除します。
- 意図:勤務時間や実働時間に近い値を求めやすくするための設計です。
休憩時間が経過時間を上回る場合の扱いは、UI上の制約やエラー処理方針に従います。一般的には、入力ミスを防ぐために警告またはエラー表示を優先します。
7. 表示形式と出力(Output)
- H:MM:SS:時・分・秒の形式で経過時間を表示します。
- 時間:経過時間を時間単位で表示します。
- 分:経過時間を分単位で表示します。
- 秒:経過時間を秒単位で表示します。
出力形式の切替は、計算結果そのものを変更するものではなく、同じ内部結果を異なる表示単位に変換して見せる機能です。内部値の整合性を保つため、まず計算結果を確定し、その後に表示形式へ変換します。
8. エラーハンドリング
- 代表的なエラー:必須入力の欠落、形式不正、範囲外の値、休憩時間の異常値など。
- エラーメッセージは日本語で、どの項目を修正すべきか分かるように表示します。
- アクセシビリティ配慮として、エラーは
role="alert"、結果はaria-live="polite"のような形で通知する実装を想定しています。
エラー時には曖昧な失敗ではなく、入力内容のどこに問題があるかをなるべく明確に示すことを重視しています。
9. 性能・安全性
- 計算はクライアントサイドで実行し、通常の利用では非常に軽量です。
- 入力件数が少ない単一フォーム中心のため、計算量は小さく、即時に結果を返すことを想定しています。
- ユーザーの計算内容を外部へ送信せず、ブラウザ内で処理する設計を基本としています。
内部処理は過度に複雑なアルゴリズムではなく、時刻差の計算と表示変換を中心とした構成です。これにより、説明可能性と処理の安定性を両立しやすくしています。
10. データ保存とプライバシー
- 計算データは、原則としてサーバーへ送信せず、ブラウザ内で処理します。
- サイト設定として、テーマや一部の表示設定を
localStorageに保存する場合があります。 - 保存項目は、ユーザー体験の改善に必要な最小限にとどめます。
履歴機能や旧来の加減算リストを前提とした保存仕様は、現在のホームページの主要ツールでは中心機能ではありません。詳細は プライバシー を参照してください。
11. 品質保証(Testing Methodology)
- ユニットテスト:正常系と異常系の両方を確認します。
- 境界値テスト:同時刻、翌日またぎ直前、休憩時間あり/なしなどを確認します。
- 表示変換テスト:同一の内部結果が H:MM:SS / 時間 / 分 / 秒で一貫して表示されるかを確認します。
- アクセシビリティ検証:キーボード操作、スクリーンリーダー、ライブリージョン通知などを確認します。
- ブラウザ互換:Windows / macOS / iOS / Android の主要ブラウザ環境を対象に確認します。
代表テストケース(例)
| ID | 入力 | 設定 | 期待出力 |
|---|---|---|---|
| T-001 | 開始 09:00 / 終了 17:00 / 休憩 1:00 | 通常計算 | 7:00 |
| T-002 | 開始 22:30 / 終了 06:00 / 休憩 0:30 | 翌日またぎ | 7:00 |
| T-003 | 開始 09:15 / 終了 09:15 / 休憩 0:00 | 同時刻 | 0:00 |
| T-004 | 開始 未入力 / 終了 18:00 | 必須入力不足 | エラー表示 |
| T-005 | 開始 08:00 / 終了 12:00 / 休憩 5:00 | 休憩過大 | 警告またはエラー |
12. 既知の制約・限界
- 入力UIや時刻フォーマットは、利用デバイスやブラウザ実装によって見え方が異なる場合があります。
- 外部コンテンツや広告iframeの挙動は、提供元の仕様に依存する部分があります。
- 残業区分、割増率、法定内外などの労務判断は、個別の規程や法解釈に依存するため、本ページでは扱いません。
- 丸め処理はホームページの主要な時間差計算ロジックには含まれず、必要な場合は個別ツール側の仕様に依存します。
13. 再現手順(Reproducibility)
本ページで示したロジックは、同じ入力条件を与えることで再現可能です。たとえば、開始時刻、終了時刻、休憩時間を固定すれば、同じ経過時間が得られることを前提としています。
// 簡易サンプル:翌日またぎ
start = "22:00"
end = "06:00"
breakDuration = "1:00"
result = calculateElapsed(start, end, breakDuration)
// expected: 7:00
今後、公開テストケースやCSV形式の入力例・期待出力例を整備する場合があります。
14. 変更履歴
- v2 — ホームページの主要ツール変更に合わせ、時刻差・経過時間中心の方法論へ全面改訂。
- v1 — 初版公開。
15. 参考資料
- WAI-ARIA / WCAG(JIS X 8341-3:2016 相当)
- 時刻入力と時間差計算に関する一般的な実装指針
- ブラウザにおけるフォーム入力とクライアントサイド処理の考え方
- 当サイトの アクセシビリティ方針・プライバシー・免責事項