generated at
日報テンプレートへの週番号追加
日報テンプレートinfobox週報に対応した形式にする
✅Done

要件
日報に週情報のブラケティングを埋め込みたい
例: [週報 2024-w14]
この14を出したい
infoboxでの週報をみやすくするのが目的


必要っぽいこと
テンプレートに書き込む
週情報(週番号)の計算・取得
変数に格納


参照

gemini先生の指南を頂く
template.j
function getWeekNumber(date) { // 年の最初の木曜日を取得 const firstThursday = new Date(date.getFullYear(), 0, 4); // 1月1日からその木曜日までの経過日数 const daysSinceJan1 = Math.floor((date - firstThursday) / (1000 * 60 * 60 * 24)); // 週番号を計算 const weekNumber = Math.floor(daysSinceJan1 / 7) + 1; // 週番号を2桁で表示 return weekNumber.toString().padStart(2, "0"); } const today = new Date(); const number = getWeekNumber(today); return `${number}`

その木曜日、ってのがいまいちよくわからんな(足りない言語化)cFQ2f7LRuLYP
年の最初の木曜日をとるのはISO 8601の定義のため
1月1日が第一週に属する
月曜日が週始まりである
単純に計算の問題であるし、構文の問題でもある


template.j
function dateToIso8601Week(date){ // 引数のDateと同じ週の木曜日を計算 // 259200000 = 3days * 24hour * 60min * 60s * 1000ms // 604800000 = 1week * 7days * 24hour * 60min * 60s * 1000ms const thursday = new Date(Math.ceil((date.getTime() - 259200000) / 604800000) * 604800000); // 木曜日と同じ年の1月1日を計算 const firstDayOfYear = new Date(thursday.getFullYear(), 0, 1); // 木曜日がその年の第何週かを計算する const weekOfYear = Math.floor((thursday.getTime() - firstDayOfYear.getTime()) / 604800000) + 1; // 曜日をISO 8601に直す (jsは0=日~6=金、ISO 8601は1=月~7=日) const dayOfWeek = date.getDay() !== 0 ? date.getDay() : 7; // yyyy-Www-D 形式に直す return `${thursday.getFullYear()}-W${('0' + weekOfYear).slice(-2)}-${dayOfWeek}`; } function getWeekNumber { const today = new Date(); const weekNumber = dateToIso8601Week(today); return `${weekNumber}`; }

動作した!cFQ2f7LRuLYP
template.js
(function() { function getWeekNumber() { const today = new Date(); // 引数のDateと同じ週の木曜日を計算 // 259200000 = 3days * 24hour * 60min * 60s * 1000ms // 604800000 = 1week * 7days * 24hour * 60min * 60s * 1000ms const thursday = new Date( Math.ceil((today.getTime() - 259200000) / 604800000) * 604800000 ); // 木曜日と同じ年の1月1日を計算 const firstDayOfYear = new Date(thursday.getFullYear(), 0, 1); // 木曜日がその年の第何週かを計算する const weekOfYear = Math.floor((thursday.getTime() - firstDayOfYear.getTime()) / 604800000) + 1; // 曜日をISO 8601に直す (jsは0=日~6=金、ISO 8601は1=月~7=日) //const dayOfWeek = today.getDay() !== 0 ? today.getDay() : 7; // yyyy-Www 形式に直す return `${thursday.getFullYear()}-W${('0' + weekOfYear).slice(-2)}`; } const weekNumber = getWeekNumber(); return `${weekNumber}`; })()

console.log(weekNumber);
ここで数字は出てるからいいとこまでは行っていそうcFQ2f7LRuLYP
問題はどうやってテキストエリアに出すか
うまく動作している形式(全体を function で囲む)で動かしたらうまくいったcFQ2f7LRuLYP