文字列データを日付データの変換について

文字列データを日付データに変換する方法について、伺いたいです。

 

現在、下記のような条件でJavascriptを作っています。

 

フィールド:

基準日となる日付フィールド:卒業日

計算結果をセットする日付フィールド:入校日

 

動き:

"卒業日"の3ヶ月半前の値を自動計算して"入校日"にセット。

条件として入校日は必ず"月曜日"にしたいので、卒業日の3ヶ月半前が、月、火、水の場合、その週の月曜日に自動修正。木、金の場合、翌週の月曜日に自動修正。

 

上記条件を元にChatGPTで吐き出したコードは下記の通りとなります。

計算結果は問題なく出力できたのですが、データ形式が文字列となっているため、日付フィールドに値が入らずkintone上ではエラーになってしまいます。(文字列フィールドには値が入る)

 

日付フィールドに値をセットするには、どのような修正を行えば良いかお分かりの方、ご教示いただけますと幸いです。

(function() {
  "use strict";

  // イベントの種類を取得
  var events = ['app.record.create.submit', 'app.record.edit.submit'];

  kintone.events.on(events, function(event) {
    var record = event.record;

    // 出国予定日フィールドの値を取得
  var departureDate = new Date(record.卒業日.value);

    // 3.5ヶ月前の日付を計算
    var calculatedDate = new Date(departureDate.getTime());
    calculatedDate.setMonth(calculatedDate.getMonth() - 3);
    calculatedDate.setDate(calculatedDate.getDate() - 15);

    // 計算された日付の曜日を取得
    var dayOfWeek = calculatedDate.getDay();

    // 月曜日から木曜日までの場合、その週の月曜日に修正
    if (dayOfWeek >= 1 && dayOfWeek <= 4) {
      calculatedDate.setDate(calculatedDate.getDate() - (dayOfWeek - 1));
    }
    // 金曜日の場合、翌週の月曜日に修正
    else if (dayOfWeek === 5) {
      calculatedDate.setDate(calculatedDate.getDate() + (8 - dayOfWeek));
    }
    // 土曜日の場合、翌週の月曜日に修正
    else if (dayOfWeek === 6) {
      calculatedDate.setDate(calculatedDate.getDate() + (9 - dayOfWeek));
    }
    // 日曜日の場合、翌週の月曜日に修正
    else if (dayOfWeek === 0) {
      calculatedDate.setDate(calculatedDate.getDate() + 1);
    }

  // 入校日フィールドに計算結果をセット
  record.入校日.value = calculatedDate;

    return event;
  });
})();

データ形式が文字列だからいけないのではなく、正しい形式の文字列になっていないためです。日付フィールドに代入するのは文字列です。正確に言えばDateオブジェクトを文字列に変換する必要があり、文字列(1行)フィールドに入ったのは文字列ではなくDateオブジェクトです(ご自身でも勉強して進められるのであれば、違いを理解しておくと良いです)。

フィールド形式の日付欄や日時のフォーマット欄はご覧になりましたか?YYYY-MM-DD形式の文字列に変換すれば問題ないです。変換する方法はいくつかあり、一般的なのはライブラリを使ってformatを変換する方法やgetFullYear()とgetMonth()とgetDate()を「-」で連結する方法ですが、ChatGPTなら答えてくれるかもしれません。

mls-hashimoto

ご教示いただき、ありがとうございます。

再度練り直してみます。

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