Change the algorithm used to calculate week numbers

The currently used algorithm returns incorrect results in some corner
cases, so replace it with a better one.

https://bugzilla.gnome.org/show_bug.cgi?id=620125
This commit is contained in:
Mads Villadsen 2010-05-30 23:17:40 +02:00 committed by Florian Müllner
parent 0f52c924e2
commit ee79579b2e

View File

@ -9,7 +9,6 @@ const Shell = imports.gi.Shell;
const Gettext_gtk20 = imports.gettext.domain('gtk20');
const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const MSECS_IN_WEEK = MSECS_IN_DAY * 7;
const WEEKDATE_HEADER_WIDTH_DIGITS = 3;
const SHOW_WEEKDATE_KEY = 'show-weekdate';
@ -20,12 +19,20 @@ function _sameDay(dateA, dateB) {
}
function _getCalendarWeekForDate(date) {
let startOfYear = new Date(date.getFullYear(), 0, 1);
let sday = startOfYear.getDay();
let offset = 4 + (7 * Math.floor(sday * (1/5))) - sday;
let firstThursday = new Date(date.getFullYear(), 0, 1 + offset);
let weekOfYear = Math.ceil((date.getTime() - firstThursday.getTime()) / MSECS_IN_WEEK);
return weekOfYear;
// Based on the algorithms found here:
// http://en.wikipedia.org/wiki/Talk:ISO_week_date
let midnightDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
// Need to get Monday to be 1 ... Sunday to be 7
let dayOfWeek = 1 + ((midnightDate.getDay() + 6) % 7);
let nearestThursday = new Date(midnightDate.getFullYear(), midnightDate.getMonth(),
midnightDate.getDate() + (4 - dayOfWeek));
let jan1st = new Date(nearestThursday.getFullYear(), 0, 1);
let diffDate = nearestThursday - jan1st;
let dayNumber = Math.floor(Math.abs(diffDate) / MSECS_IN_DAY);
let weekNumber = Math.floor(dayNumber / 7) + 1;
return weekNumber;
}
function _getDigitWidth(actor){