summaryrefslogtreecommitdiffstats
path: root/shack/Eselkalk/index.js
blob: f64e06054db5a6a22a2cd58b20d6c7250837e653 (plain)
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))