From f341c13069638134460335a014e95719ade46e27 Mon Sep 17 00:00:00 2001
From: Christian Pointner <equinox@helsinki.at>
Date: Tue, 14 Jul 2015 17:37:37 +0200
Subject: calculating the timezone offset should work now - needs testing


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;
 }
-- 
cgit v0.10.2