summaryrefslogtreecommitdiff
path: root/www/js/utils.js
blob: 86c369bcd66e74261bf54cf6c00f364ed76e95f8 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
 *  rhrdweb
 *
 *  Copyright (C) 2016 Christian Pointner <equinox@helsinki.at>
 *
 *  This file is part of rhrdweb.
 *
 *  rhrdweb is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  any later version.
 *
 *  rhrdweb is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with rhrdweb. If not, see <http://www.gnu.org/licenses/>.
 */

'use strict';

Number.prototype.pad = function(size) {
  var s = String(this);
  while (s.length < (size || 2)) {s = "0" + s;}
  return s;
}

var weekday = new Array(7);
weekday[0] = 'Sonntag';
weekday[1] = 'Montag';
weekday[2] = 'Dienstag';
weekday[3] = 'Mittwoch';
weekday[4] = 'Donnerstag';
weekday[5] = 'Freitag';
weekday[6] = 'Samstag';

var weekday_short = new Array('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa');

var monthname = new Array(7);
monthname[0] = 'Jänner';
monthname[1] = 'Februar';
monthname[2] = 'März';
monthname[3] = 'April';
monthname[4] = 'Mai';
monthname[5] = 'Juni';
monthname[6] = 'Juli';
monthname[7] = 'August';
monthname[8] = 'September';
monthname[9] = 'Oktober';
monthname[10] = 'November';
monthname[11] = 'Dezember';

var monthname_short = new Array('Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez');

function format_time(d) {
  if(Object.prototype.toString.call(d) !== '[object Date]') {
    return '-';
  }
  if (d.toString() === 'Invalid Date') {
    return '-';
  }
  var timestr = Number(d.getHours()).pad(2);
  timestr += ':' + Number(d.getMinutes()).pad(2);
  timestr += ':' + Number(d.getSeconds()).pad(2);
  return timestr;
}

function format_datetime(d) {
  if(Object.prototype.toString.call(d) !== '[object Date]') {
    return '-';
  }
  if (d.toString() === 'Invalid Date') {
    return '-';
  }
  var datetimestr = weekday_short[d.getDay()];
  datetimestr += ' ' + Number(d.getDate()).pad(2);
  datetimestr += '.' + Number(d.getMonth() + 1).pad(2);
  datetimestr += '.' + d.getFullYear();
  datetimestr += ' ' + Number(d.getHours()).pad(2);
  datetimestr += ':' + Number(d.getMinutes()).pad(2);
  datetimestr += ':' + Number(d.getSeconds()).pad(2);
  return datetimestr;
}

function msToTimeString(time) {
  if(time == '-') return time;

  var h = Number(Math.floor(time / 3600000));
  time %= 3600000;
  var m = Number(Math.floor(time / 60000));
  time %= 60000;
  var s = Number(Math.floor(time / 1000));
  var hs = Number(Math.floor((time % 1000)/100));

  return h + ':' + m.pad(2) + ':' + s.pad(2) + '.' + hs;
}

function get_rd_week(msEpoch) {
  //
  // This computes the current Rivendell Week based on the number
  // of weeks since epoch.
  //
  // Explanation:
  //  epoch was at 01.01.1970 which was a Thursday.
  //  Monday in that week is (s-from-epoch + 3*24*60*60) seconds ago.
  //  This needs to be adjusted by the timezone offset for Europe/Vienna
  //  which is of course not constant (damn you daylight savings time)
  //  Divide this by (7*24*60*60) and you get the number of
  //  weeks since the Monday in the week of epoch adjusted for timezone offsets.
  //  This week had week number 3 so add an offset of 2 and
  //  get the modulo of 4. This rounded down gives you the current week
  //  with 0 meaning Week 1. So add 1 to that number and you will get
  //  the current RD week.
  //
  var sEpoch = msEpoch / 1000 ;
  var week = Math.floor((((sEpoch + 259200)/604800) + 2) % 4) + 1;
  return week;
}