みなさんこんにちは!ひろポンです!
最近仕事で勤怠管理システムを作ることになりました!
SEが板についてきたようで、非常に楽しい毎日を過ごしています!
勤怠管理システムとは、具体的に従業員1人に対し、1日の勤務実績が紐づくようなシステムで、従業員と勤務日の複合PKが成り立つようなシステムなんですね!
そして今回このシステムを作るにあたり、深夜時間の算出方法に、半日ほどハマってしまいました。。。
ですが、勤務中は絶賛はまり中だったのが、退社時にははまりも解消!完璧に理解!ということで、今回は深夜時間の出し方の備忘録として、深夜時間をVB.NETで出す際の考え方を書いていこうと思います。
ちなみに、この考え方はVB.NET以外でも通用すると思います。
では早速本題に入っていきましょう!
まず初めにすることは、時間をずらす
深夜時間帯を出すにあたって一番重要なことは、時間をずらすことです。
というのも、現在日本では深夜時間帯を労基法で、22:00から5:00と定めています。
この22:00から5:00で深夜時間帯を出す場合、”22:00から24:00”の場合と”0:00から5:00”の場合の、2パターン”いずれかの条件に当てはまる”という条件を書く必要が出てきます。
正直これだと少し計算しずらいですよね。。
なので、これを計算しやすくするために考えたのが、時間をずらすという考えです。
どういうことかと言うと、深夜時間帯が22:00から5:00というのであれば、この時間帯と”勤務開始時間”及び”勤務終了時間”をそれぞれ2時間後ろにずらしても問題ないはずです。
もっと具体的に言うと、深夜時間帯を22:00から5:00とし、勤務開始時間が23:00、勤務終了時間が4:00とした場合、それぞれ2時間後ろにずらし、深夜時間帯を0:00から7:00、勤務開始時間を1:00、勤務終了時間を6:00と考えても同じことという訳です。
ではここからはこの考え方を基準に説明していきます。
勤務開始時間と終了時間が同じ日の場合
もし勤務開始時間と終了時間が同じ日の場合。これは同じ深夜時間帯を計算の基準に考える事が出来ます。
下の図のようなイメージですね。
このようなパターンの場合、深夜終了時間が深夜時間帯か、若しくは深夜開始時間が深夜時間帯かの2パターンいずれかを考える事で、深夜時間帯を出す事が出来ます。
終了時間が深夜時間帯の場合
終了時間が深夜時間帯の場合、単純に終了時間から開始時間をマイナスすれば結果が出ます。
開始時間帯が深夜時間帯の場合
では終了時間が深夜時間帯出なかった場合。
開始時間が1:00、終了時間が10:00のように、勤務終了時間が深夜時間帯を出て日中の時間に入っていると言うことが出来ます。
ということは、この場合深夜時間帯の終わりの時間。すなわち7:00から深夜開始時間をマイナスして、深夜時間帯を出すと言うことになります。
勤務開始時間と終了時間が違う日の場合
勤務開始時間と終了時間が同じの場合は、結構単純な式で深夜時間を出す事が出来ましたが、勤務開始時間と終了時間が違う日にちの場合、算出は少しややこしいです。
深夜時間帯を前半と後半で分けるという考え方
勤務開始時間と終了時間が同じ日出ない場合というのは、以下のようなパターンですね。
ということは前半の深夜時間と後半の深夜時間で分けて考える事が出来ればスムーズに算出することができますよね!
【深夜前半】勤務開始時間が深夜時間帯の場合
まずは前半の深夜時間の場合です。
この場合は単純で、勤務終了と開始で別の日という前提があるので、深夜時間帯の終了時間7:00から勤務開始時間をマイナスしましょうということです。
勤務開始時間が深夜時間帯出ない場合、前半深夜時間は0です。
【深夜後半】勤務終了時間が深夜時間帯の場合
では後半の深夜時間を出す場合ですが、終了時間が深夜時間帯の場合は、終了時間がそのまま深夜時間になります。
なぜならば、開始時間と終了時間が別の日という前提があるので、深夜開始時間は絶対に0:00です。
ということは、深夜終了時間マイナス0:00=深夜終了時間ということになるので、勤務終了時間が深夜時間帯に入っている場合、そのまま勤務終了時間が深夜時間になります。
【深夜後半】勤務開始時間が深夜時間帯出ない場合
では一方で、勤務終了時間が深夜時間帯に入っていない場合ですが、この場合は、深夜開始時間が0:00で終了時間が深夜終了時間の7:00と決まっているので、7:00が深夜時間ということになります。
まとめ
このような形で2時間ずらしで計算をすると、非常にわかりやすい形で計算をすることができます!
行ってみれば0:00から7:00にかぶっている時間帯を出せればいいので、早朝時間帯を出したい時などにも応用が利くかもしれませんね!
一応他にも実際にVB.NETでどのようなコードになるのか?という点や2日以上にわたる場合の計算方法など書きたい事が山盛りなんですが、、、、Ubuntu上にPHP環境をインストールするのにハマっているので、これが解決したらがっつり書いていきます!
では!
コメント