お世話になっております。
タイトルの件について、カスタマイズビューで平均時間の計算を行い、表示させたいと考えております。
開始時間と終了時間の時刻フィールドがあり、文字列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”)」の間違い?
⇒その通りです。すみませんでした。
ご教授いただいたように設定し、無事、平均時間の設定ができました。
ありがとうございます。
今後ともよろしくお願いいたします。