From f4580c8920aa76b3f29a2237f3de8a28088f06b6 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Mon, 7 Nov 2016 15:01:09 -0500 Subject: [PATCH] (js) Fix computation of week number --- NEWS | 1 + UI/WebServerResources/js/Common/utils.js | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 0a1b4018e..bd4f0af1d 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,7 @@ Bug fixes - [core] fixed condition in weekly recurrence calculator - [web] fixed mail settings persistence when sorting by arrival date - [web] disable submit button while saving an event or a task (#3880) + - [web] fixed computation of week number 3.2.1 (2016-11-02) ------------------ diff --git a/UI/WebServerResources/js/Common/utils.js b/UI/WebServerResources/js/Common/utils.js index 9523ea934..375505f21 100644 --- a/UI/WebServerResources/js/Common/utils.js +++ b/UI/WebServerResources/js/Common/utils.js @@ -325,6 +325,9 @@ Date.prototype.beginOfDay = function() { return beginOfDay; }; +/** + * See [SOGoUser firstWeekOfYearForDate:] + */ Date.prototype.firstWeekOfYearForDate = function(localeProvider) { var firstWeekRule, dayOfWeek, januaryFirst, firstWeek; @@ -354,19 +357,24 @@ Date.prototype.firstWeekOfYearForDate = function(localeProvider) { return firstWeek; }; +/** + * See [SOGoUser weekNumberForDate:] + */ Date.prototype.getWeek = function(localeProvider) { - var firstWeek, previousWeek, weekNumber; + var firstWeek, previousWeek, weekNumber, clone; - firstWeek = this.firstWeekOfYearForDate(localeProvider); - if (firstWeek.getTime() < this.getTime()) { - weekNumber = 1 + Math.floor((this.getTime() - firstWeek.getTime()) / (86400000 * 7)); + clone = new Date(this.getTime()); + clone.addDays(6); + firstWeek = clone.firstWeekOfYearForDate(localeProvider); + if (firstWeek.getTime() < clone.getTime()) { + weekNumber = 1 + Math.floor((clone.getTime() - firstWeek.getTime()) / (86400000 * 7)); } else { // Date is within the last week of the previous year; // Compute the previous week number to find the week number of the requested date. // The number will either be 52 or 53. - previousWeek = new Date(this.getTime()); + previousWeek = new Date(clone.getTime()); previousWeek.addDays(-7); firstWeek = previousWeek.firstWeekOfYearForDate(localeProvider); weekNumber = 2 + Math.floor((previousWeek.getTime() - firstWeek.getTime()) / (86400000 * 7));