From e3fb33c473e493867f0d5e3ed1b68b85c7257aa8 Mon Sep 17 00:00:00 2001 From: camgraff <46980357+camgraff@users.noreply.github.com> Date: Sun, 13 Sep 2020 05:56:40 -0500 Subject: [PATCH] [bugfix] Fix bug where .format() modifies original moment instance (#5580) * Made era functions clone moment instance before calling startOf() * Add regression tests * Run prettier-fmt --- src/lib/units/era.js | 8 ++++---- src/test/moment/format.js | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/lib/units/era.js b/src/lib/units/era.js index 28c71495d..805814619 100644 --- a/src/lib/units/era.js +++ b/src/lib/units/era.js @@ -144,7 +144,7 @@ export function getEraName() { eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time - val = this.startOf('day').valueOf(); + val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].name; @@ -164,7 +164,7 @@ export function getEraNarrow() { eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time - val = this.startOf('day').valueOf(); + val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].narrow; @@ -184,7 +184,7 @@ export function getEraAbbr() { eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time - val = this.startOf('day').valueOf(); + val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].abbr; @@ -207,7 +207,7 @@ export function getEraYear() { dir = eras[i].since <= eras[i].until ? +1 : -1; // truncate time - val = this.startOf('day').valueOf(); + val = this.clone().startOf('day').valueOf(); if ( (eras[i].since <= val && val <= eras[i].until) || diff --git a/src/test/moment/format.js b/src/test/moment/format.js index 1ea1e9f0e..7fbcafc01 100644 --- a/src/test/moment/format.js +++ b/src/test/moment/format.js @@ -927,3 +927,25 @@ test('HTML5_FMT.WEEK', function (assert) { 'issue #4833 regression' ); }); + +test('does not modify original moment instance', function (assert) { + let m = moment(0), + original = moment(0); + m.format('yyyy-MM-DD'); + assert.equal( + m.toISOString(), + original.toISOString(), + 'issue #5571 regression' + ); + + assert.deepEqual( + moment(new Date('2020-08-11 23:59:59')) + .format('yyyy-MM-DD HH:mm:ss') + .split(' '), + moment(new Date('2020-08-11 23:59:59')) + .format('HH:mm:ss yyyy-MM-DD') + .split(' ') + .reverse(), + 'issue #5681 regression' + ); +}); -- 2.47.3