diff --git a/src/plugin/duration/index.js b/src/plugin/duration/index.js
--- a/src/plugin/duration/index.js
+++ b/src/plugin/duration/index.js
@@ -95,7 +95,7 @@ class Duration {
       seconds += this.$d.milliseconds / 1000
     }
     const S = seconds ? `${seconds}S` : ''
-    const T = (H || M || S) ? 'T' : ''
+    const T = (H || m || S) ? 'T' : ''
     const result = `P${Y}${M}${D}${T}${H}${m}${S}`
     return result === 'P' ? 'P0D' : result
   }

diff --git a/test/plugin/duration.test.js b/test/plugin/duration.test.js
--- a/test/plugin/duration.test.js
+++ b/test/plugin/duration.test.js
@@ -23,7 +23,7 @@ describe('Creating', () => {
   })
   it('two argument will bubble up to the next', () => {
     expect(dayjs.duration(59, 'seconds').toISOString()).toBe('PT59S')
-    expect(dayjs.duration(60, 'seconds').toISOString()).toBe('P1M')
+    expect(dayjs.duration(60, 'seconds').toISOString()).toBe('PT1M')
     expect(dayjs.duration(13213, 'seconds').toISOString()).toBe('PT3H40M13S')
   })
   it('object with float', () => {
@@ -78,7 +78,7 @@ it('Is duration', () => {
 it('toJSON', () => {
   expect(JSON.stringify({
     postDuration: dayjs.duration(5, 'minutes')
-  })).toBe('{"postDuration":"P5M"}')
+  })).toBe('{"postDuration":"PT5M"}')
 })
 
 describe('Humanize', () => {
diff --git a/test/plugin/relativeTime.test.js b/test/plugin/relativeTime.test.js
--- a/test/plugin/relativeTime.test.js
+++ b/test/plugin/relativeTime.test.js
@@ -137,3 +137,9 @@ it('Custom thresholds and rounding support', () => {
   })
   expect(dayjs().subtract(45, 'm').fromNow()).toBe('45 minutes ago')
 })
+
+it('Locale without relativeTime config fallback', () => {
+  expect(dayjs().locale({
+    name: 'test-locale'
+  }).fromNow()).toEqual(expect.any(String))
+})

Duration.toISOString() returns wrong result
**Describe the bug**
dayjs.duration(dayjs.duration(1, 'minutes').toISOString()).as('minutes') returns 43200
dayjs.duration(1, 'minutes').toISOString() return 'P1M'

**Expected behavior**
Should return 1
Suppose that dayjs.duration(1, 'minutes').toISOString() should return 'PT1M'

**Information**
 - Day.js Version [1.8.24]
 - OS: [macOS Mojave 10.14.6]
 - Browser [chrome 81.0.4044.122 (Official Build) (64-bit)]
 - Time zone: [GMT+3 (Moscow Standard Time)]


test/timezone.test.js(1) test/timezone.test.js(2) test/timezone.test.js(3) test/timezone.test.js(4) test/plugin/relativeTime.test.js
test/plugin/duration.test.js