# 勤務時間の計算について

**URL:** <https://community.cybozu.dev/t/topic/7148>\
**Category:** kintone 開発相談\
**Created:** [2021 年 6 月 1 日午前 6:38 UTC](https://community.cybozu.dev/t/topic/7148 "2021-06-01T06:38:07Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account2469](https://avatars.discourse-cdn.com/v4/letter/l/f17d59/32.png) [@Legacy\_Account2469](https://community.cybozu.dev/u/Legacy_Account2469)\
**Post date:** [2021 年 6 月 1 日午前 6:38 UTC](https://community.cybozu.dev/t/topic/7148/1 "2021-06-01T06:38:07Z")

</div>

お世話になります。

困っている件が多いので、こちらでまたご迷惑おかけします。

勤務時間を入力するアプリを作成しています。

勤務時間自と勤務時間至の時間計算をし、「残業時間合計」、22時以降は「深夜残業時間合計」が算出されるようにしています。

ここに曜日が「土」「日」「祝日」を選択した場合、「残業時間合計」ではなく「休日出勤時間合計」に値が入るように条件処理を入れたいです。

（休日でも深夜時間は同様に「深夜残業時間合計」に入る）

&nbsp;

現在は以下のスクリプトを組んだのですが、ここにどのような処理を入れれば実現できるでしょうか。

(function() {  
“use strict”;  
kintone.events.on([  
‘app.record.create.change.勤務時間自’, ‘app.record.edit.change.勤務時間自’,  
‘app.record.create.change.勤務時間至’, ‘app.record.edit.change.勤務時間至’,  
], function (event){  
var sum = [0, 0, 0];  
var period = [0, 5, 9, 17.5, 22, 24];  
var arrival = new Date(event.record.勤務時間自.value);  
var leaving = new Date(event.record.勤務時間至.value);  
var time = (leaving.getTime() - arrival.getTime()) / 1000 / 60 / 60;  
var start = arrival.getHours() + arrival.getMinutes() / 60;  
while(time \> 0){  
if(start \>= period[4]){  
sum[2] += Math.min(period[5]-start, time);  
time -= Math.min(period[5]-start, time);  
start = period[0];  
}else if(start \>= period[3]){  
sum[1] += Math.min(period[4]-start, time);  
time -= Math.min(period[4]-start, time);  
start = period[4];  
}else if(start \>= period[2]){  
sum[0] += Math.min(period[3]-start, time);  
time -= Math.min(period[3]-start, time);  
start = period[3];  
}else if(start \>= period[1]){  
sum[1] += Math.min(period[2]-start, time);  
time -= Math.min(period[2]-start, time);  
start = period[2];  
}else{  
sum[2] += Math.min(period[1]-start, time);  
time -= Math.min(period[1]-start, time);  
start = period[1];  
}  
}

event.record.残業時間合計.value = sum[1];  
event.record.深夜残業時間合計.value = sum[2];  
return event;  
});  
})();

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2613](https://avatars.discourse-cdn.com/v4/letter/l/41988e/32.png) [@Legacy\_Account2613](https://community.cybozu.dev/u/Legacy_Account2613)\
**Post date:** [2021 年 6 月 1 日午前 11:26 UTC](https://community.cybozu.dev/t/topic/7148/2 "2021-06-01T11:26:25Z")

</div>

標準の自動計算で（一部？）可能だと思います。

[https://www.r3it.com/blog/202009-oki-calculate-the-working-time](https://www.r3it.com/blog/202009-oki-calculate-the-working-time)

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2469](https://avatars.discourse-cdn.com/v4/letter/l/f17d59/32.png) [@Legacy\_Account2469](https://community.cybozu.dev/u/Legacy_Account2469)\
**Post date:** [2021 年 6 月 2 日午前 2:40 UTC](https://community.cybozu.dev/t/topic/7148/3 "2021-06-02T02:40:28Z")

</div>

コメントありがとうございます。

勤務時間の計算までは実現できています（サンプルをつなぎ合わせただけですが）

最後、

event.record.残業時間合計.value = sum[1];  
event.record.深夜残業時間合計.value = sum[2];

にIF文条件として、「曜日」が「土」「日」「祝日」の場合は

event.record.休日出勤時間合計.value = sum[1];

そうでない場合は

event.record.残業時間合計.value = sum[1];

&nbsp;

という部分だけ実現したいです。

つまり **IF文条件、「曜日」が「土」「日」「祝日」の場合は**

この書き方が上手くいきません

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2613](https://avatars.discourse-cdn.com/v4/letter/l/41988e/32.png) [@Legacy\_Account2613](https://community.cybozu.dev/u/Legacy_Account2613)\
**Post date:** [2021 年 6 月 2 日午前 3:35 UTC](https://community.cybozu.dev/t/topic/7148/4 "2021-06-02T03:35:24Z")

</div>

Kintoneの自動計算フィールドだと、

```
IF(
OR(曜日="土", 曜日="日", 曜日="祝日"),
休日出勤時間合計,
残業時間合計
)

```

Javascriptだと

```
const WEEK_DAY = event.record.曜日.value;
if(['土','日','休日'].includes(WEEK_DAY)){
//「曜日」が「土」「日」「祝日」の場合やること。
}else{
//そうでないと、やること。
}

```

私も自動計算フィールドで困ったことがあります。sum配列には正しい値が入っているかどうか先だと思います。

以下のコードでチェックしましょう。

```
**console.log(sum);**

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2469](https://avatars.discourse-cdn.com/v4/letter/l/f17d59/32.png) [@Legacy\_Account2469](https://community.cybozu.dev/u/Legacy_Account2469)\
**Post date:** [2021 年 6 月 2 日午前 4:12 UTC](https://community.cybozu.dev/t/topic/7148/5 "2021-06-02T04:12:13Z")

</div>

[Lorenz Ras](https://community.cybozu.dev/hc/ja/profiles/901635409166-Lorenz-Ras)様

度々ありがとうございます。上手く動作させることができました。

初歩的な質問をしてしまい申し訳ありません。

とても助かりました！
