# 有休計算について

**URL:** <https://community.cybozu.dev/t/topic/951>\
**Category:** kintone 開発相談\
**Created:** [2017 年 10 月 16 日午前 7:57 UTC](https://community.cybozu.dev/t/topic/951 "2017-10-16T07:57:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1748](https://avatars.discourse-cdn.com/v4/letter/l/898d66/32.png) [@Legacy\_Account1748](https://community.cybozu.dev/u/Legacy_Account1748)\
**Post date:** [2017 年 10 月 16 日午前 7:57 UTC](https://community.cybozu.dev/t/topic/951/1 "2017-10-16T07:57:08Z")

</div>

お世話になっております。

[勤怠管理アプリをカスタマイズしてみよう](https://community.cybozu.dev/hc/ja/articles/115000926746-%E5%8B%A4%E6%80%A0%E7%AE%A1%E7%90%86%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86) を参照して自社用に『勤怠管理』を作りたく、投稿させていただきました。

有休日数：日数＋時間で計算したいですが、可能でしょうか？

アドバイス頂くようよろしくお願い致します。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1740](https://avatars.discourse-cdn.com/v4/letter/l/ed8c4c/32.png) [@Legacy\_Account1740](https://community.cybozu.dev/u/Legacy_Account1740)\
**Post date:** [2017 年 10 月 18 日午前 2:36 UTC](https://community.cybozu.dev/t/topic/951/2 "2017-10-18T02:36:34Z")

</div>

玲香様

お世話になっております。 cstapの江田です。

サンプルの188行目から202行目の部分を以下のように変更することで実装できるかと思います。

ただし、有休日数を文字列型のフィールドとしています。

操作上の注意ですが、計算フィールドのchangeイベントは取得できないので、勤務時間に変更があった場合は計算完了後に有休のチェックボタンを押しなおす必要があります。

```
kintone.events.on(["app.record.create.change.有休","app.record.edit.change.有休","app.record.create.change.Table","app.record.edit.change.Table",],function(event){varrecord=event.record;varsum=0;varday;varhour;for(vari=0;i\<record.Table.value.length;i++){if(record.Table.value[i].value.有休.value.length===1&&record.Table.value[i].value.勤務時間.value!==""){vartime=record.Table.value[i].value.勤務時間.value.split(':');sum+=(Number(time[0])\*60+Number(time[1]));}}day=Math.floor(sum/(8\*60));hour=(sum%(8\*60))/60;record.有休日数.value=day+"日"+hour+"時間";returnevent;});

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1748](https://avatars.discourse-cdn.com/v4/letter/l/898d66/32.png) [@Legacy\_Account1748](https://community.cybozu.dev/u/Legacy_Account1748)\
**Post date:** [2017 年 10 月 19 日午前 5:38 UTC](https://community.cybozu.dev/t/topic/951/3 "2017-10-19T05:38:44Z")

</div>

**[江田篤史](https://community.cybozu.dev/hc/ja/profiles/5826575706-%E6%B1%9F%E7%94%B0%E7%AF%A4%E5%8F%B2)&nbsp;様**

**いつも大変お世話になっております。**

**すごいです。想定していた通りできております。本当にありがとうございます。とても感動しております。**

**大変恐縮でございますが、以下の２つの質問させて頂いても大丈夫でしょうか？**

**①「計算フィールドのchangeイベントは取得できないので、勤務時間に変更があった場合は計算完了後に有休のチェックボタンを押しなおす必要があります。」⇒務時間に変更があった場合（開始、終了、休憩）を変更した場合、有休のチェックがキャンセルされるという設定は可能でしょうか？（初心者で大変恐縮ですが、『有休』がチェックボックスではなく、ドロップダウンだったら可能でしょうか？それともどんな属性でも同じでしょうか？）**

**②頂いているコードをちょっと加工し添付のように編集してみましたが、今の場合、テーブルで追加を押さないと計算がされなくて・・また、②実務日数（今回は４日）を求めたいが、どうずればいいか躓いてしまって・・**

**実務日数を求めているのは、交通費が日割りとなっている人に対して、その出勤した日数をわかるためでございます。**

**お手数を重々承知しておりますが、再びアドバイス頂ける事は可能でしょうか？どうぞよろしくお願い致します。**

jQuery.noConflict();  
(function() {  
“use strict”;

kintone.events.on([  
“app.record.create.change.形態”, “app.record.edit.change.形態”,  
“app.record.create.change.Table”, “app.record.edit.change.Table”,  
], function(event) {  
var record = event.record;  
var sum = 0;  
var sum2 = 0;  
var day;  
var day2;  
var hour;  
var hour2;  
var 有休日数= “有休数”;  
var 実務日数= “実務数”;  
var working = record.所定労働時間.value;  
for (var i = 0; i \< record.Table.value.length; i++) {  
if (record.Table.value[i].value.形態.value ==‘有給’ && record.Table.value[i].value.勤務時間.value !== “”) {  
var time = record.Table.value[i].value.勤務時間.value.split(‘:’);  
sum += (Number(time[0]) \* 60 + Number(time[1]));  
}if (record.Table.value[i].value.形態.value== ‘出勤’ && record.Table.value[i].value.勤務時間.value !== “”) {  
var time2 = record.Table.value[i].value.勤務時間.value.split(‘:’);  
sum2 += (Number(time2[0]) \* 60 + Number(time2[1]));  
}  
}  
day = Math.floor(sum / (working \* 60));  
day2 = Math.floor(sum2 / (working \* 60));  
hour = (sum % (working \* 60)) / 60;  
hour2 = (sum2 % (working \* 60)) / 60;  
record.有休数.value = day + “日” + hour + “時間”;  
record.実務数.value = day2 + “日” + hour2 + “時間”;

return event;  
});

})(jQuery);
