diff --git a/src/plugin/customParseFormat/index.js b/src/plugin/customParseFormat/index.js
--- a/src/plugin/customParseFormat/index.js
+++ b/src/plugin/customParseFormat/index.js
@@ -151,21 +151,20 @@ const parseFormattedInput = (input, format, utc) => {
     const {
       year, month, day, hours, minutes, seconds, milliseconds, zone
     } = parser(input)
-    if (zone) {
-      return new Date(Date.UTC(
-        year, month - 1, day,
-        hours || 0,
-        minutes || 0, seconds || 0, milliseconds || 0
-      ) + (zone.offset * 60 * 1000))
-    }
     const now = new Date()
     const d = day || ((!year && !month) ? now.getDate() : 1)
     const y = year || now.getFullYear()
-    const M = month > 0 ? month - 1 : now.getMonth()
+    let M = 0
+    if (!(year && !month)) {
+      M = month > 0 ? month - 1 : now.getMonth()
+    }
     const h = hours || 0
     const m = minutes || 0
     const s = seconds || 0
     const ms = milliseconds || 0
+    if (zone) {
+      return new Date(Date.UTC(y, M, d, h, m, s, ms + (zone.offset * 60 * 1000)))
+    }
     if (utc) {
       return new Date(Date.UTC(y, M, d, h, m, s, ms))
     }

diff --git a/test/plugin/customParseFormat.test.js b/test/plugin/customParseFormat.test.js
--- a/test/plugin/customParseFormat.test.js
+++ b/test/plugin/customParseFormat.test.js
@@ -98,6 +98,25 @@ it('parse HH:mm:ss but only one digit', () => {
   expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())
 })
 
+describe('parse YYYY / YYYY-MM only', () => {
+  it('YYYY', () => {
+    const input = '2001 +08:00'
+    const format = 'YYYY Z'
+    expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())
+    const input2 = '2001'
+    const format2 = 'YYYY'
+    expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf())
+  })
+  it('YYYY-MM', () => {
+    const input = '2001-01 +08:00'
+    const format = 'YYYY-MM Z'
+    expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())
+    const input2 = '2001-01'
+    const format2 = 'YYYY-MM'
+    expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf())
+  })
+})
+
 it('parse hh:mm:ss but only one digit', () => {
   const input = '0:0:1'
   const format = 'hh:mm:ss'

[Bug]customParseFormat Zone Error

parse error
```
in:
  dayjs("2001 +08:00", 'YYYY Z').format()
out:
  "Invalid Date"
```
```
in:
  dayjs("2001-01 +08:00", 'YYYY-MM Z').format()
out:
  "Invalid Date"
```
```
in:
  dayjs("2001-01-02 +08:00", 'YYYY-MM-DD Z').format()
out:
  "2001-01-02T00:00:00+08:00"
```

**Information**
 - Day.js v1.8.21
 - OS: Mac  10.14.6
 - Browser chrome 80.0.3987.149
 - Time zone: GMT+0800 (中国标准时间)


Have you import the  CustomParseFormat plugin first?  https://day.js.org/docs/en/parse/string-format
yes, i have import this file.
 if i do not import, example 3 will not work .
test/timezone.test.js(1) test/timezone.test.js(2) test/timezone.test.js(3) test/timezone.test.js(4)
test/plugin/customParseFormat.test.js