diff --git a/src/plugin/weekOfYear/index.js b/src/plugin/weekOfYear/index.js
--- a/src/plugin/weekOfYear/index.js
+++ b/src/plugin/weekOfYear/index.js
@@ -6,13 +6,22 @@ export default (o, c, d) => {
     if (week !== null) {
       return this.add((week - this.week()) * 7, 'day')
     }
+
+    const weekStart = this.$locale().weekStart || 0
+
     // d(this) clone is for badMutable plugin
     const endOfYear = d(this).endOf(Y)
-    if (endOfYear.day() !== 6 && this.month() === 11 && (31 - this.date()) <= endOfYear.day()) {
+    if (
+      weekStart === 0 &&
+      endOfYear.day() !== 6 &&
+      this.month() === 11 &&
+      31 - this.date() <= endOfYear.day()
+    ) {
       return 1
     }
+
     const startOfYear = d(this).startOf(Y)
-    const compareDay = startOfYear.subtract(startOfYear.day(), D).subtract(1, MS)
+    const compareDay = startOfYear.subtract(startOfYear.day() - weekStart, D).subtract(1, MS)
     const diffInWeek = this.diff(compareDay, W, true)
     return Math.ceil(diffInWeek)
   }

diff --git a/test/plugin/weekOfYear.test.js b/test/plugin/weekOfYear.test.js
--- a/test/plugin/weekOfYear.test.js
+++ b/test/plugin/weekOfYear.test.js
@@ -2,6 +2,7 @@ import moment from 'moment'
 import MockDate from 'mockdate'
 import dayjs from '../../src'
 import weekOfYear from '../../src/plugin/weekOfYear'
+import '../../src/locale/en-gb'
 
 dayjs.extend(weekOfYear)
 
@@ -14,6 +15,8 @@ afterEach(() => {
 })
 
 it('Week of year', () => {
+  dayjs.locale('en')
+
   const day = '2018-12-31T10:59:09+08:00'
   const week = 27
   expect(dayjs(day).week()).toBe(moment(day).week())
@@ -24,3 +27,15 @@ it('Week of year', () => {
   expect(dayjs().weeks(55).week()).toBe(moment().weeks(55).week())
   expect(dayjs().weeks()).toBe(moment().weeks())
 })
+
+it('Week of year with locale', () => {
+  dayjs.locale('en-gb')
+  moment.locale('en-gb')
+
+  const day = '2019-07-28'
+  expect(dayjs(day).week()).toBe(moment(day).week())
+
+  // Edges
+  expect(dayjs('2018-12-30').week()).toBe(moment('2018-12-30').week())
+  expect(dayjs('2019-12-29').week()).toBe(moment('2019-12-29').week())
+})

expect(dayjs('2019-07-28').week()).toBe(30)
**Describe the bug**
Since the introduction of `locale.weekStart` I expect it to work with e.g `.week()` plugin, but currently it doesn't. 2019-07-28 is Sunday, so in `en-gb` locale it should be part of week 30, not week 31.

In Jest syntax:
```javascript
require('dayjs/locale/en-gb')
dayjs.locale('en-gb')

expect(dayjs('2019-07-28').week()).toBe(30)
```

throws:
```
Expected: 30
Received: 31
```

**Information**
 - Day.js Version: `1.8.15`
 - OS: MacOS
 - Browser Chrome 76
 - Time zone: Stockholm

UPD: attaching a screenshot of my WeekNumberAware calendar:

![image](https://user-images.githubusercontent.com/4757745/62225643-22762300-b3b9-11e9-9b88-4aecfef04abd.png)



I _almost_ found a solution by changing one line:
```typescript
// before
const compareDay = startOfYear.subtract(startOfYear.day(), 'd').subtract(1, 'ms')
// after
const compareDay = startOfYear.subtract(startOfYear.day() - weekStart, 'd').subtract(1, 'ms')

// const weekStart = (this as any).$locale().weekStart || 0
```

Running test for last year and it works, except for `2018-12-30` and `2019-12-29` (last Sunday of the year)...
Ahaa! These edge cases fail because of this condition:
```javascript
if (endOfYear.day() !== 6 && this.month() === 11 && (31 - this.date()) <= endOfYear.day()) {
      return 1
    }
```
Found good solution: https://stackoverflow.com/a/6117889/4919972

Will post a link to my plugin when I'm done...
So, basically, the problem is to support 3 popular world "locales": ISO (Europe), US/Canada (weekStart=0) and Arab countries where weekStart=6.

With limited time I couldn't hack together a universal solution, so I ended up there: https://github.com/NaturalCycles/time-lib/blob/master/src/plugin/weekOfYear.ts

I'm taking US/Canada solution from stock Dayjs weekOfYear plugin (it works ONLY for US/Canada, but breaks for other 2 cases). Stackoverflow solution works for ISO (but breaks for other 2). I've adopted both solutions with simple `if (weekStart =0) ... else ...`. But no solution for weekStart=6 yet.

I'm happy if someone can fix a proper solution for all these 3 cases.

I'm surprised how hard of a problem this can be...
@kirillgroshkov I'm running into the same problem. I wonder if taking a look to how moment.js (or other libraries) have implemented it should help: https://github.com/moment/moment/blob/96d0d6791ab495859d09a868803d31a55c917de1/moment.js#L1212
I will be working on this. Thanks for finding this problem.
@g1eny0ung that would be great! I'm evaluating this library for the next version of https://github.com/gpbl/react-day-picker and this is so far the only blocker.
@kirillgroshkov @gpbl Sorry for the delay. I'm a little busy in daily works.

I test the `weekOfYear` plugin in https://runkit.com/g1eny0ung/5d4b84fed30292001ad9ba08

Because the `weekOfYear` plugin didn't consider the situation of locale, the result of `dayjs('2019-07-28').week()` is same as `moment('2019-07-28').week()`.

But if we set locale in momentjs, like `moment.locale('en-gb')`, then momentjs will consider the locale in the result of a week of the year.

I think the solution mentioned above is correct:

```
const compareDay = startOfYear.subtract(startOfYear.day() - weekStart, 'd').subtract(1, 'ms')
```

@iamkun What do you think?

If there is nothing wrong with it, I will open a PR to solve this issue.
test/timezone.test.js(1) test/timezone.test.js(2) test/timezone.test.js(3) test/timezone.test.js(4)
test/plugin/weekOfYear.test.js