一覧に色付けしたい

初心者です。ご教示いただけますと幸いです。

日付フィールド 自
フィールドコード 自

日付フィールド 至
フィールドコード 至

一覧画面にて
kintoneを開き、開いた日から(本日であれば本日から1ヶ月前の自)自の日付が1ヶ月以内のものに
フィールドを黄色付け

日付フィールド 至
フィールドコード 至
kintoneを開き、開いた日から自から至までの(本日であれば本日が自から至までの間)
フィールドを赤色付け

赤だけが表示されるのですが、どこが違うのかがご教示いただけますと幸いです。

(function() {
‘use strict’;

kintone.events.on(‘app.record.index.show’, function(event) {
var targetDate = new Date(); // 表示する対象の日付を設定(例: 現在の日付)
targetDate.setMonth(targetDate.getMonth() - 1); // 1ヶ月前の日付を計算

var records = event.records;
for (var i = 0; i < records.length; i++) {
  var startDate = new Date(records[i].自.value); // 「自」フィールドの値を取得
  var endDate = new Date(records[i].至.value); // 「至」フィールドの値を取得

  if (isWithinOneMonth(startDate, targetDate)) {
    // 「自」が1ヶ月以内の場合は、黄色で表示
    kintone.app.getFieldElements('自')[i].parentNode.style.backgroundColor = 'yellow';
  } else {
    // それ以外の場合は背景色をクリア
    kintone.app.getFieldElements('自')[i].parentNode.style.backgroundColor = '';
  }

  if (isWithinDateRange(startDate, endDate, targetDate)) {
    // 「自」から「至」までの期間が開いた日から1ヶ月以内の場合は、赤色で表示
    kintone.app.getFieldElements('自')[i].parentNode.style.backgroundColor = 'red';
    kintone.app.getFieldElements('至')[i].parentNode.style.backgroundColor = 'red';
  }
}

return event;

});

function isWithinOneMonth(startDate, targetDate) {
var oneMonthAgo = new Date(targetDate);
oneMonthAgo.setMonth(oneMonthAgo.getMonth() - 1); // 1ヶ月前の日付を計算

return startDate >= oneMonthAgo && startDate <= targetDate; // 「自」が1ヶ月以内の場合にtrueを返す

}

function isWithinDateRange(startDate, endDate, targetDate) {
return startDate <= targetDate && endDate >= targetDate; // 「自」から「至」までの期間が開いた日から1ヶ月以内の場合にtrueを返す
}
})();

「いいね!」 1

赤色しか表示されないということであれば、ifの条件である isWithinOneMonth() などが怪しそう、ということですよね。

targetDateやoneMonthAgoなどが想定した日付になってるか一度みたほうがよさそうです。
ブレークポイントをはることで、実際の日付がどうなっているか確認することができますのでぜひ見てみてください。
returnの直前あたりでみると想定どおりかわかるかとおもいます。
ブレークポイントの貼り方参考
(見やすいformatでコンソールログに出してみる、でもよさそうです

「いいね!」 1

ありがとうございます。
うまくいかず苦戦しておりまして、お返事できずに申し訳ありません。
もう少し試してみて、お返事いたします。

「いいね!」 2

ありがとうございます。苦戦しながらもできました!!
以下コードになります。
やはり、ご指摘いただいた部分 isWithinOneMonth() が問題でした。

(function() {
‘use strict’;

kintone.events.on(‘app.record.index.show’, function(event) {
var targetDate = new Date(); // 表示する対象の日付を設定(例: 現在の日付)

var records = event.records;
for (var i = 0; i < records.length; i++) {
var startDate = new Date(records[i].自.value); // 「自」フィールドの値を取得
var endDate = new Date(records[i].至.value); // 「至」フィールドの値を取得

if (isWithinOneMonth(targetDate, startDate)) {
// 「自」の日付が表示対象の日付から1ヶ月後以内の場合は、パステルイエローで表示
kintone.app.getFieldElements(‘自’)[i].parentNode.style.backgroundColor = ‘#FDFD96’;
} else {
// それ以外の場合は背景色をクリア
kintone.app.getFieldElements(‘自’)[i].parentNode.style.backgroundColor = ‘’;
}

if (isWithinDateRange(startDate, endDate, targetDate)) {
// 「自」から「至」までの期間が開いた日から1ヶ月以内の場合は、パステルレッドで表示
kintone.app.getFieldElements(‘自’)[i].parentNode.style.backgroundColor = ‘#FF6961’;
kintone.app.getFieldElements(‘至’)[i].parentNode.style.backgroundColor = ‘#FF6961’;
}
}

return event;
});

function isWithinOneMonth(targetDate, startDate) {
var oneMonthLater = new Date(targetDate);
oneMonthLater.setMonth(oneMonthLater.getMonth() + 1); // 表示対象の日付から1ヶ月後の日付を計算

return startDate >= targetDate && startDate < oneMonthLater; // 「自」の日付が表示対象の日付から1ヶ月後以内の場合にtrueを返す
}

function isWithinDateRange(startDate, endDate, targetDate) {
return startDate <= targetDate && endDate >= targetDate; // 「自」から「至」までの期間が開いた日から1ヶ月以内の場合にtrueを返す
}
})();

「いいね!」 2

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