generated at
テンプレート

テンプレートを使ってページを作成(UserScript版) で使ってる週報のテンプレート。

仕様
月曜日から日曜日までの行を書きます。
週番号の計算方法を選べるようにしてあります。
デフォルトはISO式の月曜始まり
カスタマイズする場合、
1. 下のテンプレートをコピー
2. 自分のプロジェクトの任意のページにペースト
3. 編集
ってな流れです。

ISO式では木曜日が含まれる週を数えるのだけど、たとえば
2017年の1月1日(日曜日)は2016年の52週目に含まれる
この週の木曜日はまだ2016年なので
2017年の1週目は1月2日から始まる
ってことになるよ。
米国式は1月1日が含まれる週をその年の1週目として、日~月で1週間を数えるので、2017年1月1日から1月7日が1週目。

週報テンプレート.js
(function() { Date.prototype.setWeek = function(year, week, day) { var week1 = new Date(year, 0, 1) var prevLastDay = new Date(week1.getTime() - 86400000 * (week1.getDay() || 7)) return this.setTime(prevLastDay.getTime() + 86400000 * ((week - 1) * 7 + day)) } Date.prototype.setISOWeek = function(year, week, day) { var week1 = new Date(year, 0, 4) var prevLastDay = new Date(week1.getTime() - 86400000 * (week1.getDay() || 7)) return this.setTime(prevLastDay.getTime() + 86400000 * ((week - 1) * 7 + day)) } Date.prototype.format = function(format) { // yyyy, MM, dd, ddd だけ const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] return format.replace('ddd', days[this.getDay()]) .replace('yyyy', this.getFullYear()) .replace('MM', ('0' + (this.getMonth() + 1)).slice(-2)) .replace('dd', ('0' + this.getDate()).slice(-2)) } // 処理ここから const yearWeek = scrapbox.Page.title.split("'") // 新規ページの仮タイトルから、年と週番号を取得して const d = new Date() // 週番号の計算方法をここで指定するよ //d.setWeek(yearWeek[0], yearWeek[1], 0) // 米国式・月曜始まり //d.setWeek(yearWeek[0] - 1, yearWeek[1], 6) // 米国式・日曜始まり d.setISOWeek(yearWeek[0], yearWeek[1], 0) // ISO式・月曜始まり //d.setISOWeek(yearWeek[0], yearWeek[1] - 1, 6) // ISO式・日曜始まり const dateFormat = "yyyy-MM-dd" const dayFormat = "ddd" // ここで返してるものがページのタイトルと本文になるよ! 1週間分の日付と曜日を並べていきます return ` [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [MTG] `@ 8:30` プランニング [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [MTG] `@ 8:30` 進捗報告 [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. Backlog] ` })()

汎用的に使えるシンプル版
週報テンプレートS.js
(function() { Date.prototype.setWeek = function(year, week, day) { var week1 = new Date(year, 0, 1) var prevLastDay = new Date(week1.getTime() - 86400000 * (week1.getDay() || 7)) return this.setTime(prevLastDay.getTime() + 86400000 * ((week - 1) * 7 + day)) } Date.prototype.setISOWeek = function(year, week, day) { var week1 = new Date(year, 0, 4) var prevLastDay = new Date(week1.getTime() - 86400000 * (week1.getDay() || 7)) return this.setTime(prevLastDay.getTime() + 86400000 * ((week - 1) * 7 + day)) } Date.prototype.format = function(format) { // yyyy, MM, dd, ddd だけ const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] return format.replace('ddd', days[this.getDay()]) .replace('yyyy', this.getFullYear()) .replace('MM', ('0' + (this.getMonth() + 1)).slice(-2)) .replace('dd', ('0' + this.getDate()).slice(-2)) } // 処理ここから const yearWeek = scrapbox.Page.title.split("'") // 新規ページの仮タイトルから、年と週番号を取得して const d = new Date() // 週番号の計算方法をここで指定するよ //d.setWeek(yearWeek[0], yearWeek[1], 0) // 米国式・月曜始まり //d.setWeek(yearWeek[0] - 1, yearWeek[1], 6) // 米国式・日曜始まり d.setISOWeek(yearWeek[0], yearWeek[1], 0) // ISO式・月曜始まり //d.setISOWeek(yearWeek[0], yearWeek[1] - 1, 6) // ISO式・日曜始まり const dateFormat = "yyyy-MM-dd" const dayFormat = "ddd" // ここで返してるものがページのタイトルと本文になるよ! 1週間分の日付と曜日を並べていきます return ` [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. [${new Date(d.setDate(d.getDate() + 1)).format(dateFormat)}] ${d.format(dayFormat)}] [**. Backlog] ` })()

初出 2017-11-19
2018-07-01 ISO方式の日付を取得する例にバグありましたので修正
2020-01-26 Moment.js が使えなくなったぽいのでテンプレートを修正