# 日時フィールドの時刻を時刻フィールドに設定したい

**URL:** <https://community.cybozu.dev/t/topic/4301>\
**Category:** kintone 開発相談\
**Created:** [2019 年 8 月 19 日午前 8:40 UTC](https://community.cybozu.dev/t/topic/4301 "2019-08-19T08:40:45Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account862](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Legacy\_Account862](https://community.cybozu.dev/u/Legacy_Account862)\
**Post date:** [2019 年 8 月 19 日午前 8:40 UTC](https://community.cybozu.dev/t/topic/4301/1 "2019-08-19T08:40:45Z")

</div>

ご教授ください！プログラミング初心者です。

ある月の時間帯別の呼数を集計をしようとして、日時フィールドでは時間帯ごとの集計ができないことがわかりました。

すでに数か月当該アプリを利用してもらっているため、フィールドの変更はできません。

日時フィールドから時刻を取り出して時刻フィールドに設定する方法を教えていただければ幸いです。どうかよろしくお願いします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1821](https://avatars.discourse-cdn.com/v4/letter/l/d07c76/32.png) [@Legacy\_Account1821](https://community.cybozu.dev/u/Legacy_Account1821)\
**Post date:** [2019 年 8 月 19 日午前 8:46 UTC](https://community.cybozu.dev/t/topic/4301/2 "2019-08-19T08:46:39Z")

</div>

yuiさん、こんにちは。

すでにレコードがいくつか登録されているという状況ですね。

であれば、ファイル出力／ファイル入力を使って、以下の方法でデータを投入できると思います。

不安であれば、テスト用アプリを作って試してみてください。

1. 既存レコードのデータをCSVで書き出し
2. Excel等で、日時データの列から、時刻列を作成し、CSVファイル保存  
レコード番号、時刻 だけのCSVでいいと思います。
3. 既存レコードを更新（レコード番号を更新キー）

---

<div class="post-metadata">

**Author:** ![Legacy\_Account862](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Legacy\_Account862](https://community.cybozu.dev/u/Legacy_Account862)\
**Post date:** [2019 年 8 月 19 日午前 9:00 UTC](https://community.cybozu.dev/t/topic/4301/3 "2019-08-19T09:00:03Z")

</div>

Matshuda 様

早速のご回答、ありがとうございます。

既存レコードは数千件に上るので途方に暮れていました。ご教授のとおり、CSVの出力→編集（※時刻フィールド列の作成）→読み込みで対応いたします。

これから入力されるレコードなのですが、カスタマイズで日時のフィールドから時刻を取り出して、上記の※時刻フィールド列に入れたいのですが、方法を教えていただければ助かります。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account760](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account760](https://community.cybozu.dev/u/Legacy_Account760)\
**Post date:** [2019 年 8 月 20 日午前 4:43 UTC](https://community.cybozu.dev/t/topic/4301/4 "2019-08-20T04:43:15Z")

</div>

yui さん

こんにちは！

日時フィールドの時刻だけを時刻フィールドに設定、という認識でよかったでしょうか。

&nbsp;

既に時刻フィールドを配置済みであれば、以下のような処理で一括更新させるのはいかがでしょうか。

[コチラ](https://community.cybozu.dev/hc/ja/community/posts/360017977863)を参考に、処理を記述してみました。

見苦しいコードになってるかもしれませんが、参考になれば嬉しいです。

&nbsp;

※ moment.js を利用してます。

※ アプリのフィールドのフィールドコードはそれぞれ以下のようになってます。

&nbsp; &nbsp;&nbsp; ・ 日時フィールド : re

&nbsp; &nbsp;&nbsp; ・ 時刻フィールド : time

```
(function() {
"use strict";

var getRecords = function(app, tmpRecords){
var limit = 500;
var tmpRecords = tmpRecords || [];

return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: app,
query: 'limit ' + limit +' offset ' + tmpRecords.length
}).then(function(response){
tmpRecords = tmpRecords.concat(response.records);
return response.records.length === limit ? getRecords(app, tmpRecords) : tmpRecords;
});
}

var putRecords = function(app, records){
var limit = 100;

return Promise.all(
records.reduce(function(recordsBlocks, record){
if(recordsBlocks[recordsBlocks.length - 1].length === limit){
recordsBlocks.push([record]);
}else{
recordsBlocks[recordsBlocks.length - 1].push(record);
}
return recordsBlocks;
}, [[]]).map(function(recordsBlock){
return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {
app: app,
records: recordsBlock
});
})
);
}

kintone.events.on('app.record.index.show', function(event){
if(document.getElementById('updateButton') !== null) return;

var button = document.createElement('button');
button.innerHTML = '一括更新';
button.id = 'updateButton';
kintone.app.getHeaderMenuSpaceElement().appendChild(button);

button.addEventListener('click', function(){
getRecords(kintone.app.getId()).then(function(records){
putRecords(kintone.app.getId(), records.map(function(record){
return {
id: record.レコード番号.value,
record: {
time: {
value: moment(record.re.value).utc().format('HH:mm')
}
}
};
})).then(function(){
alert('更新しました。');
location.reload();
});
});
});
return event;
});
})();

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account760](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account760](https://community.cybozu.dev/u/Legacy_Account760)\
**Post date:** [2019 年 8 月 20 日午前 5:32 UTC](https://community.cybozu.dev/t/topic/4301/5 "2019-08-20T05:32:47Z")

</div>

yui さん

&nbsp;

日時フィールドの changeイベントで時刻フィールドに値を設定する対応は

いかがでしょうか。以下のコードで実装できますよ！

参考になればうれしいです。

&nbsp;

※ CSVファイルでデータを更新する場合もあるのかなと思い、

&nbsp; &nbsp; 一括更新の処理はそのままに、change の処理を追記したものになります。

```
(function() {
"use strict";

var getRecords = function(app, tmpRecords){
var limit = 500;
var tmpRecords = tmpRecords || [];

return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: app,
query: 'limit ' + limit +' offset ' + tmpRecords.length
}).then(function(response){
tmpRecords = tmpRecords.concat(response.records);
return response.records.length === limit ? getRecords(app, tmpRecords) : tmpRecords;
});
}

var putRecords = function(app, records){
var limit = 100;

return Promise.all(
records.reduce(function(recordsBlocks, record){
if(recordsBlocks[recordsBlocks.length - 1].length === limit){
recordsBlocks.push([record]);
}else{
recordsBlocks[recordsBlocks.length - 1].push(record);
}
return recordsBlocks;
}, [[]]).map(function(recordsBlock){
return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {
app: app,
records: recordsBlock
});
})
);
}

kintone.events.on('app.record.index.show', function(event){
if(document.getElementById('updateButton') !== null) return;

var button = document.createElement('button');
button.innerHTML = '一括更新';
button.id = 'updateButton';
kintone.app.getHeaderMenuSpaceElement().appendChild(button);

button.addEventListener('click', function(){
getRecords(kintone.app.getId()).then(function(records){
putRecords(kintone.app.getId(), records.map(function(record){
return {
id: record.レコード番号.value,
record: {
time: {
value: moment(record.re.value).utc().format('HH:mm')
}
}
};
})).then(function(){
alert('更新しました。');
location.reload();
});
});
});
return event;
});

kintone.events.on(['app.record.create.change.re', 'app.record.edit.change.re', 'app.record.index.edit.change.re'], function(event){

var record = event.record;
record.time.value = moment(record.re.value).utc().format('HH:mm');

return event;
});

})();

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account862](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Legacy\_Account862](https://community.cybozu.dev/u/Legacy_Account862)\
**Post date:** [2019 年 8 月 20 日午前 5:55 UTC](https://community.cybozu.dev/t/topic/4301/6 "2019-08-20T05:55:44Z")

</div>

[文系男](https://community.cybozu.dev/hc/ja/profiles/361014852803-%E6%96%87%E7%B3%BB%E7%94%B7) 様

大変ご丁寧なご回答、本当にありがとうございました。

早速、先にいただきましたコードでトライしておりました。

結果、私の環境では添付のようなエラー？が表示されまして、原因の検討がつかず、途方にくれておりました。

大変恐縮ですが、原因を教えていただけないでしょうか？

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account760](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account760](https://community.cybozu.dev/u/Legacy_Account760)\
**Post date:** [2019 年 8 月 20 日午前 6:10 UTC](https://community.cybozu.dev/t/topic/4301/7 "2019-08-20T06:10:04Z")

</div>

yui さん

&nbsp;

恐らく、moment.js が読み込まれていないのではないかな、と思われます！

以下の手順で、moment.js を読み込ませてみてどうか、お試しください。

&nbsp;

1. 日時フィールドテスト0820アプリの設定画面を開きます

2.「JavaScript/CSSでカスタマイズ」をクリックします

3.「URL指定で追加」をクリックし、以下の URL をコピーアンドペーストで貼り付け、入力欄右側の「保存」をクリックします

&nbsp; &nbsp;&nbsp; ・ [https://js.cybozu.com/momentjs/2.24.0/moment.min.js](https://js.cybozu.com/momentjs/2.24.0/moment.min.js)

&nbsp; &nbsp;&nbsp; ・ [https://js.cybozu.com/momentjs/2.24.0/moment-with-locales.min.js](https://js.cybozu.com/momentjs/2.24.0/moment-with-locales.min.js)

&nbsp; &nbsp;&nbsp; ※ 3 を繰り返して、上記 2つの URL それぞれを追加してください。

1. 3 で追加した各URL の左側の「▲▼」のアイコンをドラッグアンドドロップで上側に持っていきます。

&nbsp; &nbsp;&nbsp; ※ “日時の時刻を時刻フィールドにコピー.js” の上側に配置してください。

1. 左上の「保存」をクリックします

2. アプリを更新します

---

<div class="post-metadata">

**Author:** ![Legacy\_Account760](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account760](https://community.cybozu.dev/u/Legacy_Account760)\
**Post date:** [2019 年 8 月 20 日午前 6:13 UTC](https://community.cybozu.dev/t/topic/4301/8 "2019-08-20T06:13:47Z")

</div>

ちなみに、開発者ツールの「Source」タブだとエラーの詳細が確認できないので、

正常に動作していない場合は、「Console」タブを開いて、何かエラーが出ていないか、

確認の上、よくわからない場合は、その画像をこちらに添付していただけると助かります。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account862](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Legacy\_Account862](https://community.cybozu.dev/u/Legacy_Account862)\
**Post date:** [2019 年 8 月 20 日午前 6:24 UTC](https://community.cybozu.dev/t/topic/4301/9 "2019-08-20T06:24:47Z")

</div>

文系男さま

ご指摘どおり、moment.jsを追加して実行しましたところ、添付のような結果になりました。

-9時間って、日本時間とUTC？の時差ってらしいのですが、対処の仕方を教えていただけないでしょうか？

何から何までお手数かけて申し訳ありません。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1821](https://avatars.discourse-cdn.com/v4/letter/l/d07c76/32.png) [@Legacy\_Account1821](https://community.cybozu.dev/u/Legacy_Account1821)\
**Post date:** [2019 年 8 月 20 日午前 6:29 UTC](https://community.cybozu.dev/t/topic/4301/10 "2019-08-20T06:29:34Z")

</div>

yuiさん、こんにちは。

既存レコードのデータ移行を、ファイル操作で終わっていると仮定して、

今後追加・編集されるレコードについては、以下のようなカスタマイズを入れておけばいいと思います。

一括更新については、日常的に使うのであればJavaScriptカスタマイズを入れてもいいと思いますが、

最初に投入するだけであれば、カスタマイズは最小限にしておくことをおススメします。

&nbsp;

サンプル：

※「日時」フィールドからデータをmoment.jsで取り出し、フォーマット変換（24時間表示のHH:ｍｍ）して時刻フィールドに更新

```
(function () {
"use strict";
kintone.events.on([
"app.record.create.show",
"app.record.create.change.日時",
"app.record.edit.change.日時"
], function (event) {
moment.locale('ja');
let record = event.record;
record['時刻']['value'] = moment(record['日時']['value']).format('HH:mm');
return event;
});
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account760](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account760](https://community.cybozu.dev/u/Legacy_Account760)\
**Post date:** [2019 年 8 月 20 日午前 6:36 UTC](https://community.cybozu.dev/t/topic/4301/11 "2019-08-20T06:36:39Z")

</div>

yui さん

&nbsp;

ごめんなさい。

私の環境で UTC になってたのでそのまま利用していました。

&nbsp;

以下のコードに書き直してみて、いかがでしょうか。

&nbsp;

```
(function() {
"use strict";
moment.locale('ja');

var getRecords = function(app, tmpRecords){
var limit = 500;
var tmpRecords = tmpRecords || [];

return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: app,
query: 'limit ' + limit +' offset ' + tmpRecords.length
}).then(function(response){
tmpRecords = tmpRecords.concat(response.records);
return response.records.length === limit ? getRecords(app, tmpRecords) : tmpRecords;
});
}

var putRecords = function(app, records){
var limit = 100;

return Promise.all(
records.reduce(function(recordsBlocks, record){
if(recordsBlocks[recordsBlocks.length - 1].length === limit){
recordsBlocks.push([record]);
}else{
recordsBlocks[recordsBlocks.length - 1].push(record);
}
return recordsBlocks;
}, [[]]).map(function(recordsBlock){
return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {
app: app,
records: recordsBlock
});
})
);
}

kintone.events.on('app.record.index.show', function(event){
if(document.getElementById('updateButton') !== null) return;

var button = document.createElement('button');
button.innerHTML = '一括更新';
button.id = 'updateButton';
kintone.app.getHeaderMenuSpaceElement().appendChild(button);

button.addEventListener('click', function(){
getRecords(kintone.app.getId()).then(function(records){
putRecords(kintone.app.getId(), records.map(function(record){
return {
id: record.レコード番号.value,
record: {
time: {
value: moment(record.re.value).format('HH:mm')
}
}
};
})).then(function(){
alert('更新しました。');
location.reload();
});
});
});
return event;
});

kintone.events.on(['app.record.create.change.re', 'app.record.edit.change.re', 'app.record.index.edit.change.re'], function(event){

var rec = event.record;
rec.time.value = moment(rec.re.value).format('HH:mm');

return event;
});

})();

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account862](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Legacy\_Account862](https://community.cybozu.dev/u/Legacy_Account862)\
**Post date:** [2019 年 8 月 20 日午前 6:56 UTC](https://community.cybozu.dev/t/topic/4301/12 "2019-08-20T06:56:14Z")

</div>

[文系男](https://community.cybozu.dev/hc/ja/profiles/361014852803-%E6%96%87%E7%B3%BB%E7%94%B7) 様

一括更新できました！

うれしかったので結果を添付します

ありがとうございました。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account760](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account760](https://community.cybozu.dev/u/Legacy_Account760)\
**Post date:** [2019 年 8 月 20 日午前 7:04 UTC](https://community.cybozu.dev/t/topic/4301/13 "2019-08-20T07:04:18Z")

</div>

yui さん

&nbsp;

良かったです！

お役に立てたようで、私も嬉しく存じます！＾＾

&nbsp;

ちなみに、レコードの登録、編集、レコード一覧画面上でのインライン編集の際、

日時フィールドで時刻を設定した際、別の時刻フィールドの値も連動する動きについても、

問題なく動作しておりますでしょうか？？

&nbsp;

差支えなければ、そちらの動作も念のため、確認していただけると幸いです。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account862](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Legacy\_Account862](https://community.cybozu.dev/u/Legacy_Account862)\
**Post date:** [2019 年 8 月 20 日午前 7:16 UTC](https://community.cybozu.dev/t/topic/4301/14 "2019-08-20T07:16:58Z")

</div>

[文系男](https://community.cybozu.dev/hc/ja/profiles/361014852803-%E6%96%87%E7%B3%BB%E7%94%B7)&nbsp;さま

登録、編集、一覧画面での編集、問題なく動作することを確認いたしました。

ありがとうございました。

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account760](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account760](https://community.cybozu.dev/u/Legacy_Account760)\
**Post date:** [2019 年 8 月 20 日午前 7:21 UTC](https://community.cybozu.dev/t/topic/4301/15 "2019-08-20T07:21:04Z")

</div>

yui さん

&nbsp;

問題なく動作したとのこと、承知しました！

良かったです！＾＾

---

<div class="post-metadata">

**Author:** ![Legacy\_Account862](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Legacy\_Account862](https://community.cybozu.dev/u/Legacy_Account862)\
**Post date:** [2019 年 8 月 20 日午前 7:51 UTC](https://community.cybozu.dev/t/topic/4301/16 "2019-08-20T07:51:53Z")

</div>

Matshuda 様

ご返信ありがとうございます。

一括更新の処理がないと、こんなにシンプルになるんですね。

日時データの操作の基本を教えていただき、助かります。

応用していろいろ使わせていただきます。

ありがとうございました。

&nbsp;

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2025 年 5 月 28 日午前 1:13 UTC](https://community.cybozu.dev/t/topic/4301/17 "2025-05-28T01:13:31Z")

</div>

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
