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
@@ -11,7 +11,7 @@ const matchSigned = /[+-]?\d+/ // -inf - inf
 const matchOffset = /[+-]\d\d:?(\d\d)?/ // +00:00 -00:00 +0000 or -0000 +00
 const matchWord = /\d*[^\s\d-:/()]+/ // Word
 
-let locale
+let locale = {}
 
 function offsetFromString(string) {
   if (!string) return 0
@@ -216,8 +216,9 @@ export default (o, C, d) => {
       const isStrict = isStrictWithoutLocale || isStrictWithLocale
       let pl = args[2]
       if (isStrictWithLocale) [,, pl] = args
-      if (!isStrictWithoutLocale) {
-        locale = pl ? d.Ls[pl] : this.$locale()
+      locale = this.$locale()
+      if (!isStrictWithoutLocale && pl) {
+        locale = d.Ls[pl]
       }
       this.$d = parseFormattedInput(date, format, utc)
       this.init()
@@ -226,7 +227,7 @@ export default (o, C, d) => {
         this.$d = new Date('')
       }
       // reset global locale to make parallel unit test
-      locale = undefined
+      locale = {}
     } else if (format instanceof Array) {
       const len = format.length
       for (let i = 1; i <= len; i += 1) {

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
@@ -294,6 +294,8 @@ describe('Strict mode', () => {
     const format = 'YYYY-MM-DD'
     expect(dayjs(input, format).isValid()).toBe(true)
     expect(dayjs(input, format, true).isValid()).toBe(false)
+    expect(dayjs('2020-Jan-01', 'YYYY-MMM-DD', true).isValid()).toBe(true)
+    expect(dayjs('30/1/2020 10:59 PM', 'D/M/YYYY h:mm A', true).isValid()).toBe(true)
   })
   it('with locale', () => {
     const input = '2018 三月 99'

Invalid dates are parsed as valid
Invalid dates are parsed resulting in incorrect values
e.g, 
const dt = dayjs('1993-51-11')
`dt.isValid()` returns `true` and `dt.format('YYYY-MM-DD')` returns `1997-03-11`
const dt = dayjs('1993-51-41')
`dt.isValid()` returns `true` and `dt.format('YYYY-MM-DD')` returns `1997-04-10`
infact `dayjs('1993-08-21', 'YYYY/MM/DD')` returns true for isValid()

isValid() should return false for all these 

**Information**
 - Day.js Version: v1.9.6
 - OS:  macOS 11 BigSur
 - Browser: chrome 86
 - Time zone: GMT


Yes, this is valid to js Date. 

You can use strict parsing to get what you need. https://day.js.org/docs/en/parse/string-format
```
dayjs('1970-00-00', 'YYYY-MM-DD', true).isValid() // false 
```
Does Day.js strict parsing validate time formats as well? Following returns true.  Should it return false since date string is missing the time?

`dayjs('12/3/2020', 'M/D/YYYY h:mm A', true).isValid() // true`
well, seems this is something we've never think about it.

this depends on how we define 'isValid', it should be a valid date-time？ or valid and match the given format？
IMHO, it should match the given format.  Btw, I also found the following:

`dayjs('1/30/2020', 'M/D/YYYY', true).isValid() // true`
but 
`dayjs('30/1/2020 10:59 PM', 'D/M/YYYY h:mm A', true).isValid() // false`

Both should be true.
+1
using the strict boolean does not work here as well. `dayjs('00-00-1990', 'DD-MM-YYYY', true).isValid() // true`
`edit:` As @bornova script shows, it really works. Maybe my mistake were somewhere else
> using the strict boolean does not work here as well.
> `dayjs('00-00-1990', 'DD-MM-YYYY', true).isValid() // true`

@Gabee01 Your example returns the correct value (false) on my end: https://runkit.com/5fd149b2b4b41f001d9b4bf4/5fd149f5b4b41f001d9b4c26
@bornova I'm now wondering what have I done wrong at the time. I tested the validation several times, before giving up on this. It really looks like its working on runkit.. 
Do remember this dependent on CustomParseFormat plugin to work https://day.js.org/docs/en/parse/string-format
@iamkun CustomParseFormat was really missing. thanks! 
@iamkun My issue still remains:
https://runkit.com/5fd79efc6abad7001a703bb0/5fd79f0342c42e001ad68c00

Any plans to address this in the near future?  I had to switch back to Moment.js for the time being.  Thanks for all your effort in this library! 
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