年度を取得

お世話になります。

年度ごとに集計したグラフを作成したいので、年度を自動で計算したいです。

2019/04/01 → 「2019年度」

2020/03/31 → 「2019年度」

というように西暦ではなく、4月~3月で考え、自動で項目(フィールドコード:年度)に自動で入力したいです。

書いてみましたが、普段プログラム開発をしない素人なので、見当違いと思われます。

お力添えいただけないでしょうか。以下コードです。一部割愛しています。

 

var date = record['日付']['value'];
var nendo = record['年度']['value'];
var yy = date.substring(0,4);
var dd = date.substring(5,10);

if(dd >= 01-01 && dd<= 03-31){
nendo = Number(yy + 1) + "年度";
return record;
}else{
nendo = yy + "年度";
return record;
}
record['年度']['value'] = nendo;
return record;

 

 

結構書き換えちゃいましたがこんな感じでしょうか?

/**
 * 西暦を年度で返す
 * 2019-04-01 ~ 2020-03-31 = 2019
 * @param String yy // 2019
 * @param String dd // 03-01
 * return String // 2019年度
 */
const getNendo = function (yy, dd) {
  const _yy = Number(yy);
  const _dd = Number(dd.split("-")[0]);
  if (_dd <= 3) {
    return _yy - 1 + "年度";
  }
  return _yy + "年度";
};

var date = record['日付']['value'];
var nendo = record['年度']['value'];
var yy = date.substring(0, 4);
var dd = date.substring(5, 10);

record['年度']['value'] = getNendo(yy, dd);
return event;

TK様

コメントしてくださりありがとうございます。

お礼申しあげるのが遅くなりすみません。

教えていただいたコードを参考に色々と書き換えたところ、無事動作しました。

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

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

TK様

何度もすみません。

上記の年度取得を、データが多いので一括で更新したいのですが、うまく動作しません。

どこが悪いのかご指摘していただけないでしょうか。

(function() {
"use strict";
kintone.events.on("app.record.index.show",function(event) {
if (document.getElementById('my_button') != null) {
return;
}
var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_button';
myIndexButton.innerHTML = '年度一括';

var date = kintone.app.getFieldElements('日付');
var mm = moment(date).format('M');
var mmm = Number(mm);

myIndexButton.onclik = function() {
var appId = kintone.app.getId();
var param = {
app: appId,
query: '',
fields: ['$id','日付','年度'];
totalCount: true,
isGuest: false
};
kintoneUtility.rest.getAllRecordsByQuery(param).then(function(resp) {
var param = {
"app": appId,
"records": [],
isGuest: false
};
resp.records.forEach(function(record) {
var newRec = {};

if (mmm <= 3)
newRec['年度'] = { Number(mmm - 1) };
else
newRec{'年度'] = { mmm };
param.records.push({
"id": record['$id']['value'],
"record": newRec
});
});
kintoneUtility.rest.putAllRecords(param).then(function(resp) {
console.log(resp);
},function(error) {
console.log(param);
console.log(error);
});
});
}
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
return event;
});
})();

 

>うまく動作しない

 

どう動作しないのかわからないので何とも言えません。(そもそも動かないのか、動作はするが期待の結果が得られないのかなど)

なのでデバッグしてみましょう。エラー文が問題解決の参考となります。

https://developer.cybozu.io/hc/ja/articles/207613916-%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84-%E3%81%9D%E3%82%93%E3%81%AA%E6%99%82%E3%81%AF%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86-%E5%85%A5%E9%96%80%E7%B7%A8

 

ぱっと見た感じですと、if文のところは

{}で囲ったほうがいいです。

if(条件) {
// 処理
} else {
// 処理
}

 

 

TK様

迅速なご回答ありがとうございます。

ご指摘の通りif文に{}を追加し、いろいろと書き換えたところ、思った通りの動作をしました。

ご迷惑おかけして申し訳ありません。

 

うまくいったみたいでよかったです!

あと、全然迷惑なんかじゃないです!こっちが好きで質問に答えてるのでw

デバックとか覚えたら確実に開発しやすくなるので頑張ってください!

TK様

お優しいお言葉ありがとうございます…!

慣れないプログラミングで心が折れかけていましたが、元気出ました。

頑張ります。

今後ともお力添えいただけると嬉しいです。よろしくお願いいたします。