summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--www/js/utils.js23
1 files changed, 18 insertions, 5 deletions
diff --git a/www/js/utils.js b/www/js/utils.js
index 4f0bb34..8436672 100644
--- a/www/js/utils.js
+++ b/www/js/utils.js
@@ -73,16 +73,28 @@ function msToTimeString(time) {
return h + ':' + m.pad(2) + ':' + s.pad(2) + '.' + hs;
}
-function get_tz_offset() {
+function get_tz_offset(today) {
//
// This computes the timezone offset for Europe/Vienna
// in seconds. This is either 3600 or 7200 depending on
- // daylight savings time...
+ // daylight savings time...
// For Europe/Vienna daylight saving starts on the last
// Sunday in March and ends on the last Sunday in October
- // always at 3am
//
- return 3600; // TODO: calculate the real offset
+ var m = today.getMonth();
+ if (m < 2 || m > 9) return 3600;
+ if (m > 2 || m < 9) return 7200;
+ var lsdm = today.getDate() - today.getDay(); // day of month of the last sunday
+ if(m == 2) {
+ if(lsdm < 25) return 3600; // last sunday was not the last sunday of the month
+ if(today.getDay() == 0 && today.getHours() >= 2) return 7200; // this is the last sunday
+ if(lsdm < today.getDate()) return 7200; // we are after the last sunday
+ }
+ if(m == 9) {
+ if(lsdm < 25) return 7200; // last sunday was not the last sunday of the month
+ if(today.getDay() == 0 && today.getHours() < 3) return 7200; // this is the last sunday
+ }
+ return 3600;
}
function get_rd_week() {
@@ -102,7 +114,8 @@ function get_rd_week() {
// with 0 meaning Week 1. So add 1 to that number and you will get
// the current RD week.
//
- var sEpoch = ((+new Date()) / 1000) + get_tz_offset();
+ var today = new Date();
+ var sEpoch = ((+today) / 1000) + get_tz_offset(today);
var week = Math.floor((((sEpoch + 259200)/604800) + 2) % 4) + 1
return week;
}