日付のフィールドに入力された日付が、その月の何週目かを取得したいのですが可能でしょうか。
取得先のフィールドは、文字列1行を検討しています。
日付フィールドに2022-07-01と入力されたら、「7月1週目」が自動的に入力されるようにしたいです。
よろしくお願い致します。
日付のフィールドに入力された日付が、その月の何週目かを取得したいのですが可能でしょうか。
取得先のフィールドは、文字列1行を検討しています。
日付フィールドに2022-07-01と入力されたら、「7月1週目」が自動的に入力されるようにしたいです。
よろしくお願い致します。
以下で求められます。
Day.jsを使用しています。
let date = record['日付フィールド'].value;
let weekOfMonth = Math.floor((dayjs(date).date() - dayjs(date).day() + 12) / 7);
console.log(weekOfMonth);
ありがとうございました。
私のやり方が悪いようで、うまく動かず。。
実際のkintoneの設定部分です。
何がダメでしょうか?ちなみに、7月1週目という文字のフィールドコードは「第何週目」です。
樫原さま
説明不足でした。申し訳ありません。
先ほど投稿したものは日付から月内週を求める部分のみを抜粋したコードです。
以下全文で可能かと思います。また、Day.js(ライブラリ)をコードより先に読み込む必要があります。
https://unpkg.com/dayjs@1.7.7/locale/ja.js
(function() {
'use strict';
let weekField = '第何週目'; // 第何週目を表示するフィールド
let dateField = '日付'; // 日付のフィールド
kintone.events.on([
'app.record.create.change.' + dateField, 'app.record.edit.change.' + dateField
], (event) => {
let record = event.record;
let date = record[dateField].value;
if (date) {
let weekOfMonth = Math.floor((dayjs(date).date() - dayjs(date).day() + 12) / 7);
record[weekField].value = dayjs(date).format('M月第') + weekOfMonth + '週目';
} else {
record[weekField].value = '';
}
return event;
});
})();
ありがとうございます。
下記のように、設定しましたが週目のフィールドは空白のままです。
何度も申し訳ございません。
なにが悪いのか教えていただければ幸いです。
よろしくお願い致します。
樫原さま
当方環境では動作しております。Day.jsのライブラリは読み込んでいますか?
JSEdit for kintoneを使用されているようなので、非推奨ですが一旦moment.jsにしましょう。
樫原さまが添付された画像の下部にある「Moment.js」にチェックを入れ、以下のコードに変更して下さい。
(function() {
'use strict';
let weekField = '第何週目'; // 第何週目を表示するフィールド
let dateField = '日付'; // 日付のフィールド
kintone.events.on([
'app.record.create.change.' + dateField, 'app.record.edit.change.' + dateField
], (event) => {
let record = event.record;
let date = record[dateField].value;
if (date) {
let weekOfMonth = Math.floor((moment(date).date() - moment(date).day() + 12) / 7);
record[weekField].value = moment(date).format('M月第') + weekOfMonth + '週目';
} else {
record[weekField].value = '';
}
return event;
});
})();
うごきました!
ありがとうございます。
別のアプリに上記と同じ設定をするとDay.jsの読み込みの際に、エラーがでます。
内容は下記の通りです。
https://unpkg.com/dayjs@1.7.7/locale/ja.js を開き、コピーしました。
樫原 さま
エラーとは、コンソール上のエラーですか?Day.jsを「Day.jsを使用するコード」より先に読み込んでいますか?
もしくは、画像の▲のことをエラーとしていますか?であれば問題ありません。
こちらは警告(エラーの場合は赤い×になります)でコードの構文に問題があるという旨のものですが、Day.jsをうまく解釈できていないゆえのものです。これに限らず、JSEdit for kintoneプラグインは構文チェックが数世代前のJavaScript基準で、現代のJavaScriptを解釈できません。気にされるのであれば他のテキストエディタ(VSCode等)をご検討下さい。
前回も、今回もありがとうございます。
>他のテキストエディタ(VSCode等)をご検討下さい。
そうですね。前回、成功したアプリを削除してしまいどう設定したかの確認が取れず。。。
前の投稿を確認し、設定してみましたが「何週目」のフィードには何の情報も出なくエラーなどももちろんありません。
>Day.jsを「Day.jsを使用するコード」より先に読み込んでいますか?
この意味が、分からず。。すみません。教えていただけますでしょうか。
樫原 さま
「設定」→「カスタマイズ/サービス連携」→「JavaScript / CSSでカスタマイズ」の画面上でのコードの順番です。JSEdit for kintoneをお使いであれば、保存したコードがここに保存されています(他のテキストエディタを使用する場合、この画面で作成したコードをアップロードします)。
この画面上でDay.js(ライブラリ)が実行したいプログラムより上にあれば問題ないという話です。これらも上から読み込んで実行するため、Day.jsというライブラリより先にDay.jsを使用するコード(日数計算を使うコード)を先に読み込むと「Day.jsを使おうとしたものの見付からない」というエラーになります。
とはいえ、コンソールにエラーも何も出ていないのでしたらその線は薄いかと思います。
エラーすら発生しない原因で可能性が高いのは「そもそもプログラム自体が実行されていない」または「return eventされていない」かと思います。
プログラム自体が実行されていないとは、
let dateField = '日付'; // 日付のフィールド
kintone.events.on([
'app.record.create.change.' + dateField, 'app.record.edit.change.' + dateField
], (event) => {
例えばこの部分で「日付フィールドが変更されたタイミングで実行」という意味になっていますが、この部分の指定を存在しないフィールド等にすると「実行するタイミングの存在しないコード」になります。
return eventされていないとは、文字通りreturn event(フィールドへの反映)で締められていないことを指します。
あとは、失礼を承知で申し上げますが「エラーが出ていない」とは、コンソールのエラーは含まない表現でしょうか?どの程度カスタマイズを習熟されているのか分からないのである程度理解できる前提で進めていますが、そうでない場合はこちらにコンソールの開き方が掲載されているのでお確かめ下さい。
>例えばこの部分で「日付フィールドが変更されたタイミングで実行」という意味になっていますが、この部分の指定を存在しないフィールド等にすると「実行するタイミングの存在しないコード」になります。
申し訳ございません。日付フィールドの設定が、レコード登録時の日付を初期値にするにが入った状態です。
その状態でも何週目かの取得は可能でしょうか。
樫原 さま
create.showイベントを追加すれば可能です。
樫原 さま
kintone.events.on([
'app.record.create.show',
'app.record.create.change.' + dateField, 'app.record.edit.change.' + dateField
], (event) => {
こういう意味なんですが、正直に申し上げてカスタマイズとしては基礎の部分の話になるので、これが何か分からないまま実装するのは危険です。今回の実装はともかくとして、一度チュートリアルを進めることをおすすめします。
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。