テンプレート
仕様
月曜日から日曜日までの行を書きます。
週番号の計算方法を選べるようにしてあります。
デフォルトは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]
`
})()
2018-07-01 ISO方式の日付を取得する例にバグありましたので修正
2020-01-26 Moment.js が使えなくなったぽいのでテンプレートを修正