From 02a1ad48fc118062e25d04fe1ac3c76aa6656fb8 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 5 Jan 2017 12:00:55 -0500 Subject: [PATCH] (js) Fix computation of week number Fixes #3973, 3976 --- NEWS | 1 + UI/WebServerResources/js/Common/utils.js | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index ae8c4b591..f385276b8 100644 --- a/NEWS +++ b/NEWS @@ -34,6 +34,7 @@ Bug fixes - [web] append ics file extension when importing events (#2308) - [web] handle URI in vCard photos (#2683) - [web] handle semicolon in values during LDIF import (#1760) + - [web] fixed computation of week number (#3973, #3976) - [eas] properly skip folders we don't want to synchronize (#3943) - [eas] fixed 30 mins freebusy offset with S Planner - [eas] now correctly handles reminders on tasks (#3964) diff --git a/UI/WebServerResources/js/Common/utils.js b/UI/WebServerResources/js/Common/utils.js index 375505f21..90d4343ca 100644 --- a/UI/WebServerResources/js/Common/utils.js +++ b/UI/WebServerResources/js/Common/utils.js @@ -325,6 +325,22 @@ Date.prototype.beginOfDay = function() { return beginOfDay; }; +/** + * See [SOGoUser dayOfWeekForDate:] + */ +Date.prototype.dayOfWeek = function(localeProvider) { + var offset, baseDayOfWeek, dayOfWeek; + + offset = localeProvider.firstDayOfWeek; + baseDayOfWeek = this.getDay(); + if (offset > baseDayOfWeek) + baseDayOfWeek += 7; + + dayOfWeek = baseDayOfWeek - offset; + + return dayOfWeek; +}; + /** * See [SOGoUser firstWeekOfYearForDate:] */ @@ -336,10 +352,10 @@ Date.prototype.firstWeekOfYearForDate = function(localeProvider) { januaryFirst = new Date(this.getTime()); januaryFirst.setMonth(0); januaryFirst.setDate(1); - dayOfWeek = januaryFirst.getDay(); + dayOfWeek = januaryFirst.dayOfWeek(localeProvider); if (firstWeekRule == 'First4DayWeek') { - if ((dayOfWeek + localeProvider.firstDayOfWeek) % 7 < 4) + if (dayOfWeek < 4) firstWeek = januaryFirst.beginOfWeek(localeProvider.firstDayOfWeek); else firstWeek = januaryFirst.addDays(7).beginOfWeek(localeProvider.firstDayOfWeek);