過去の桐井戸端BBS (桐ver.8)
9002 休暇時間の計算方法 oya 2000/12/19-17:07
いつもお世話になっております。桐V8sp5です。
休暇時間の計算の仕方について教えていただきたいのですが。
私の職場では時間単位で有給休暇を取れるのですが、休暇時間から休憩時間分をひいた残りを休暇取得時間としています。

勤務時間= 8:30〜17:15
休憩時間=12:15〜13:00として、
例1)休暇時間 9:30〜13:00→2時間15分
例2)休暇時間12:30〜15:00→2時間

これをフォームで、休暇の「開始時間」と「終了時間」を入力すれば、
休暇取得時間(休憩時間分を除いた時間)を計算させたいのです。

その場合、
1.休暇時間が休憩の時間をまたいでいるかどうかなど、条件式が複雑になること。
2.1日単位でなく日をまたいで入力すると更に複雑になる。(例:H12/12/19,15:00〜H12/12/20,17:15)
3.数値として入力して数値として計算させるか、日時換算して計算させるか、最初から日時として入力してそのまま計算させればよいか。

今日、一つ作ってみたのですが、(同一日での取得の場合)
数値で休暇開始の[年][月][日][時][分]と休暇終了の[年][月][日][時][分]を入力する。
[時][分]を[時]×60+[分]として分換算し、終了時間から開始時間をひく。
休憩時間が含まれているかどうかチェックして、含まれていれば除算する。
分換算を時間+分に換算し直す。
これだけで項目数が30項目くらいに増えてしまって、このあと日をまたぐ取得の場合を考えると行き詰まってしましました。

これらの条件がどうすればいい塩梅にクリアできるか、何か良いアイデアないでしょうか。
9007 Re:休暇時間の計算方法 宮城 2000/12/19-18:45
記事番号9002へのコメント
oyaさん、こんにちは。ずいぶん従業員本位の職場ですね。まあ、所与としましょう。(^^;;

単純化のために取り敢えず日またがりなしで考えましょう。これはケースわけの問題ですね。

その前に一点。

>[時][分]を[時]×60+[分]として分換算し、終了時間から開始時間をひく。

こんなことはしません。

#時間( str1 , str2 , n )

を使います。nは2ですね。少し項目数が減りましたか。

さて、ケースですが、3パターン、細かくいえば4パターンあることがわかります。

1:まったく休息時間にかからない。
 →単純に開始時分と終了時分で#時間をとる。
2:休息時間を完全にまたいでいる。
 →開始時分と終了時分で#時間をとり、45分を引いてやる。
3:開始時間か終了時間のいずれかが休息時間内。
3.1:開始時間が休息時間内。
   →13:00と終了時分で#時間。
3.2:終了時間が休息時間内。
   →開始時分と12:15で#時間。

休息時間内に完全に含まれる休暇時間を取る人はいませんよね。

9021 Re:日またがり 宮城 2000/12/20-10:22
記事番号9007へのコメント
残課題というかおまけ。日がまたがったとき。こういう申告を認めるのかというのは置いといて・・・。

時間計算に日付要素を持ち込むと話が極端に複雑化します。ゆえに・・・。

12月20日15:00から12月22日10:00

なる申告があったとして、これを3行に展開してしまいます。

12月20日15:00から12月20日17:15
12月21日08:30から12月21日17:15
12月22日08:30から12月22日10:00

これをシグマすれば足ります。

9022 Re:休暇時間の計算方法 oya 2000/12/20-11:24
記事番号9007へのコメント
宮城さん、早速のレス&メールありがとうございました。

>#時間( str1 , str2 , n )
>
>を使います。nは2ですね。少し項目数が減りましたか。

変数は文字列でいいんですね。("str1"だから当然か。)
桐はV3から使っているのですがいまいち日時データの取扱いがわからなくって困っています。
数値で入力した[時][分]を文字列に変換したり、日時値に変換したりして四苦八苦していたのにこんなに簡単にできるとは。
目から鱗・・・な気分です。

これからもよろしくお願いします。

戻る