Fix incorrect week count across year boundary. 2014-03-13
authorIain Patterson <me@iain.cx>
Thu, 13 Mar 2014 19:05:08 +0000 (15:05 -0400)
committerIain Patterson <me@iain.cx>
Thu, 13 Mar 2014 19:05:08 +0000 (15:05 -0400)
Year/week 201401 is only one week later than 201352, not 49.

lib/report.php

index f06e8ca..b2bc16d 100644 (file)
     $q->withColumn('count(*)', 'count');
     $q->addGroupByColumn('week')->orderByUpdated();
     $rows = $q->find();
+    $year_offset = 0;
     $week_offset = 0;
     $week = 1;
     $last_week = 0;
     $total = 0;
     echo "<table class=\"report\">\n";
     foreach ($rows as $row) {
-      /* Convert week of year to date range. */
-      if (! $week_offset) $week_offset = $row->getWeek() - 1;
-      else $week = $row->getWeek() - $week_offset;
+      /*
+        Convert week of year to date range.
+        Beware that week 201401 comes after 201352.
+      */
+      $yearweek = $row->getWeek();
+      if (! $week_offset) {
+        $year_offset = substr($yearweek, 0, 4);
+        $week_offset = substr($yearweek, 4, 2) - 1;
+      }
+      else {
+        $y = substr($yearweek, 0, 4);
+        $w = substr($yearweek, 4, 2);
+        $week = (($y - $year_offset) * 52) + ($w - $week_offset);
+      }
       $total += $row->getCount();
       /* Fill in missing weeks. XXX */
       for ($missing_week = $last_week + 1; $missing_week < $week; $missing_week++) {