diff --git a/src/plugin/advancedFormat/index.js b/src/plugin/advancedFormat/index.js
--- a/src/plugin/advancedFormat/index.js
+++ b/src/plugin/advancedFormat/index.js
@@ -13,7 +13,7 @@ export default (o, c, d) => { // locale needed later
     const locale = this.$locale()
     const utils = this.$utils()
     const str = formatStr || FORMAT_DEFAULT
-    const result = str.replace(/Q|wo|gggg|Do|X|x|k{1,2}|S/g, (match) => {
+    const result = str.replace(/\[([^\]]+)]|Q|wo|gggg|Do|X|x|k{1,2}|S/g, (match) => {
       switch (match) {
         case 'Q':
           return Math.ceil((this.$M + 1) / 3)
@@ -28,8 +28,10 @@ export default (o, c, d) => { // locale needed later
           return utils.s(String(this.$H === 0 ? 24 : this.$H), match === 'k' ? 1 : 2, '0')
         case 'X':
           return Math.floor(this.$d.getTime() / 1000)
-        default: // 'x'
+        case 'x':
           return this.$d.getTime()
+        default:
+          return match
       }
     })
     return oldFormat.bind(this)(result)
diff --git a/src/plugin/buddhistEra/index.js b/src/plugin/buddhistEra/index.js
--- a/src/plugin/buddhistEra/index.js
+++ b/src/plugin/buddhistEra/index.js
@@ -7,10 +7,10 @@ export default (o, c) => { // locale needed later
   proto.format = function (formatStr) {
     const yearBias = 543
     const str = formatStr || FORMAT_DEFAULT
-    const result = str.replace(/BBBB|BB/g, (match) => {
+    const result = str.replace(/(\[[^\]]+])|BBBB|BB/g, (match, a) => {
       const year = String(this.$y + yearBias)
       const args = match === 'BB' ? [year.slice(-2), 2] : [year, 4]
-      return this.$utils().s(...args, '0')
+      return a || this.$utils().s(...args, '0')
     })
     return oldFormat.bind(this)(result)
   }

diff --git a/test/plugin/advancedFormat.test.js b/test/plugin/advancedFormat.test.js
--- a/test/plugin/advancedFormat.test.js
+++ b/test/plugin/advancedFormat.test.js
@@ -82,3 +82,14 @@ it('Format Week Year gggg', () => {
   const d = '2018-12-31'
   expect(dayjs(d).format('gggg')).toBe(moment(d).format('gggg'))
 })
+
+it('Skips format strings inside brackets', () => {
+  expect(dayjs().format('[Q]')).toBe('Q')
+  expect(dayjs().format('[Do]')).toBe('Do')
+  expect(dayjs().format('[gggg]')).toBe('gggg')
+  expect(dayjs().format('[wo]')).toBe('wo')
+  expect(dayjs().format('[k]')).toBe('k')
+  expect(dayjs().format('[kk]')).toBe('kk')
+  expect(dayjs().format('[X]')).toBe('X')
+  expect(dayjs().format('[x]')).toBe('x')
+})
diff --git a/test/plugin/buddhistEra.test.js b/test/plugin/buddhistEra.test.js
--- a/test/plugin/buddhistEra.test.js
+++ b/test/plugin/buddhistEra.test.js
@@ -31,3 +31,8 @@ it('Format Buddhist Era 4 digit with other format', () => {
   const momentDate = today.format(format).replace('BBBB', today.year() + 543)
   expect(dayjs().format(format)).toBe(momentDate)
 })
+
+it('Skips format strings inside brackets', () => {
+  expect(dayjs().format('[BBBB]')).toBe('BBBB')
+  expect(dayjs().format('[BB]')).toBe('BB')
+})

avancedFormat plugin is interpolating content inside square brackets
**Describe the bug**
advancedFormat and buddhistEra plugins are changing/interpolating content inside square brackets

```javascript
// with advancedFormat
const dayJSformat = dayjs.format('[Saturday]') // outputs: outputs something like "1418400000aturday"
const momentFormat = moment.format('[Saturday]') // outputs: "Saturday"
expect(dayJSformat).toEqual(momentFormat) // throws
```
**Expected behavior**
any plugins extending the format method interpolation should uphold behavior of the original format method and not change/interpolate content inside square brackets

**Information**
 - Day.js Version: all
 - OS: all
 - Browser: all


I'll submit a pr for this (and some other plugins with the same behavior)
My test-cases and fix for #550 didn't cover this one too.
test/timezone.test.js(1) test/timezone.test.js(2) test/timezone.test.js(3)
test/plugin/buddhistEra.test.js test/plugin/advancedFormat.test.js