From 8d01fc9eb059f420bfa2d1cf4334e99509fa6da7 Mon Sep 17 00:00:00 2001 From: Waseem Ahmad Date: Sun, 20 Jan 2019 02:36:57 +0530 Subject: [PATCH] fixed issue: options.weekStartsOn set to 1 doesn't work for Sundays --- src/getWeekOfMonth/index.js | 23 ++++++++++++++++++----- src/getWeekOfMonth/test.js | 7 +++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/getWeekOfMonth/index.js b/src/getWeekOfMonth/index.js index f2617ede78..78cfcb1b20 100644 --- a/src/getWeekOfMonth/index.js +++ b/src/getWeekOfMonth/index.js @@ -50,12 +50,25 @@ export default function getWeekOfMonth(date, dirtyOptions) { throw new RangeError('weekStartsOn must be between 0 and 6 inclusively') } + var currentDayOfMonth = getDate(date) + if (isNaN(currentDayOfMonth)) { + return currentDayOfMonth + } + var startWeekDay = getDay(startOfMonth(date)) - var currentWeekDay = getDay(date) + var lastDayOfFirstWeek = 0 - var startWeekDayWithOptions = - startWeekDay < weekStartsOn ? 7 - weekStartsOn : startWeekDay - var diff = startWeekDayWithOptions > currentWeekDay ? 7 - weekStartsOn : 0 + if (startWeekDay >= weekStartsOn) { + lastDayOfFirstWeek = weekStartsOn + 7 - startWeekDay + } else { + lastDayOfFirstWeek = weekStartsOn - startWeekDay + } - return Math.ceil((getDate(date) + diff) / 7) + var weekNumber = 1 + + if (currentDayOfMonth > lastDayOfFirstWeek) { + var remainingDaysAfterFirstWeek = currentDayOfMonth - lastDayOfFirstWeek + weekNumber = weekNumber + Math.ceil(remainingDaysAfterFirstWeek / 7) + } + return weekNumber } diff --git a/src/getWeekOfMonth/test.js b/src/getWeekOfMonth/test.js index fb0a388d5f..dccf410b6e 100644 --- a/src/getWeekOfMonth/test.js +++ b/src/getWeekOfMonth/test.js @@ -74,4 +74,11 @@ describe('getWeekOfMonth', function() { it('throws TypeError exception if passed less than 1 argument', function() { assert.throws(getWeekOfMonth.bind(null), TypeError) }) + + it('returns the week of the month of the given date, when the given date is sunday', function() { + var result = getWeekOfMonth(new Date(2019, 4 /* May */, 5), { + weekStartsOn: 1 + }) + assert(result === 1) + }) })