日報テンプレートへの週番号追加
✅Done
要件
日報に週情報のブラケティングを埋め込みたい
例:[週報 2024-w14]
この14を出したい
infoboxでの週報をみやすくするのが目的
必要っぽいこと
テンプレートに書き込む
変数に格納
参照
gemini先生の指南を頂く
code: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.icon
1月1日が第一週に属する
月曜日が週始まりである
単純に計算の問題であるし、構文の問題でもある
code: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.icon
code: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);
https://gyazo.com/bb57ae594a8b457b6dbb6179e392f3c4
ここで数字は出てるからいいとこまでは行っていそうcFQ2f7LRuLYP.icon
問題はどうやってテキストエリアに出すか
うまく動作している形式(全体をfunctionで囲む)で動かしたらうまくいったcFQ2f7LRuLYP.icon