1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
//
// node //shack/Eselkalk DATE
//
// where DATE ∈ [YYYY[-MM]], defaulting to the current YYYY-MM
//
range = process.argv[2] ||
JSON.parse(JSON.stringify(new Date())).slice(0, '....-..'.length)
function dates(date) {
var year = date.getFullYear()
var month = date.getMonth()
var i = new Date([year, (month < 9 ? '0' : '') + (month + 1)].join('-'))
var days = []
var next_day = 4;
for (
; i.getMonth() === month
; i = new Date(+i + 24 * 60 * 60 * 1000)) {
if (i.getDay() === next_day) {
next_day = next_day === 3 ? 4 : 3
if (next_day === 3) {
var next_4day = new Date(+i + 7 * 24 * 60 * 60 * 1000)
if (next_4day.getMonth() !== month) {
i = new Date(+i - 24 * 60 * 60 * 1000)
next_4day = 4
}
}
days.push(new Date(+i + (20 * 60 + i.getTimezoneOffset()) * 60 * 1000))
while (i.getDay() !== 0) {
i = new Date(+i + 24 * 60 * 60 * 1000)
}
}
}
return days
}
result = []
// TODO if (/^....-..-..$/.test(range)) { ... }
if (/^....-..$/.test(range)) {
result = dates(new Date(range))
}
else if (/^....$/.test(range)) {
['01','02','03','04','05','06','07','08','09','10','11','12'
].forEach(function (i) {
result = result.concat(dates(new Date([range, i].join('-'))))
})
}
else {
throw new Error('You are made of stupid! ' + range)
}
console.log(JSON.stringify(result, null, 2))
|