平均時間の計算について

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

タイトルの件について、カスタマイズビューで平均時間の計算を行い、表示させたいと考えております。

開始時間と終了時間の時刻フィールドがあり、文字列1行の自動計算(※フィールド名:時間計算)で下記のように設定しております。

「DATE_FORMAT(開始時間-終了時間+140400, “H:mm”, “Asia/Tokyo”)」

この自動計算フィールドの平均時間の計算と表示をしようと下記コードで設定しているのですが、表示が「NaN」と表示されます。

var param_query = "";
param_query += '日付 >= "' + moment($("#condition_start").val()).format("YYYY-MM-DD") + '" and ';
param_query += '日付 <= "' + moment($("#condition_end").val()).format("YYYY-MM-DD") + '"';

var param_average0_query = "";
param_average0_query = param_query + ' and 時間計算 not in \( "")';

var param = {
app: kintone.app.getId(),
query: param_query,
totalCount: true,
isGuest: false
};

var param_average0 = {
app: kintone.app.getId(),
query: param_average0_query,
totalCount: true,
isGuest: false
};

var sum = function(arr, fn) { if (fn) { return sum(arr.map(fn)); }
else { return arr.reduce(function(prev, current, i, arr) { return prev+current; }); }
};

var average = function(arr, fn) { return sum(arr, fn)/arr.length; };

kintoneUtility.rest.getAllRecordsByQuery(param_average0).then(function(resp) {
var score0_array = $.map(resp.records, function(record, i){ return record.時間計算.value; });

var score0_ave = Math.round(average(score0_array));
$("#score0_avarage").html("<table class='data_table'><tr><th>平均時間</th></tr><tr><td>" + score0_ave + "</td></tr></table>");
}).catch(function(error){ console.log(error.message); });

平均時間をHH:MMのフォーマットで表示させたいのですが、どのようにしたら良いかご教授いただければ幸いです。

よろしくお願いいたします。

 

Nao さん

「DATE_FORMAT(開始時間-終了時間+140400, “H:mm”, “Asia/Tokyo”)」は、
「DATE_FORMAT(終了時間-開始時間+140400, “H:mm”, “Asia/Tokyo”)」の間違い?

moment.js を使うと時間計算が楽です。
下記は、切り貼りしただけですので、検証してください。

 

var param_query = "";
param_query += '日付 >= "' + moment($("#condition_start").val()).format("YYYY-MM-DD") + '" and ';
param_query += '日付 <= "' + moment($("#condition_end").val()).format("YYYY-MM-DD") + '"';

var param_average0_query = "";
param_average0_query = param_query + ' and 時間計算 not in \( "")';

var param = {
app: kintone.app.getId(),
query: param_query,
totalCount: true,
isGuest: false
};

var param_average0 = {
app: kintone.app.getId(),
query: param_average0_query,
totalCount: true,
isGuest: false
};

// var sum = function(arr, fn) {
// if (fn) { return sum(arr.map(fn)); } else { return arr.reduce(function(prev, current, i, arr) { return prev + current; }); }
// };

// var average = function(arr, fn) { return sum(arr, fn) / arr.length; };

kintoneUtility.rest.getAllRecordsByQuery(param_average0).then(function(resp) {
// var score0_array = $.map(resp.records, function(record, i) { return record.時間計算.value; });

// var score0_ave = Math.round(average(score0_array));
var records = resp.records;
var duration = moment.duration(0);
records.forEach(function(record) {
if (record['時間計算'].value) {
duration.add(moment.duration(record['時間計算'].value));
}
});
var score0_ave = '0:00';
if (records.length > 0) {
var average = duration.asMinutes() / records.length;
score0_ave = moment('2000-01-01').minutes(average).format('HH:mm');
}

$("#score0_avarage").html("<table class='data_table'><tr><th>平均時間</th></tr><tr><td>" + score0_ave + "</td></tr></table>");
}).catch(function(error) { console.log(error.message); });

 

rex0220様

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

 

「DATE_FORMAT(終了時間-開始時間+140400, “H:mm”, “Asia/Tokyo”)」の間違い?

⇒その通りです。すみませんでした。

 

ご教授いただいたように設定し、無事、平均時間の設定ができました。

ありがとうございます。

今後ともよろしくお願いいたします。