From 33b0106e85d53321f91da639b85f9acd2957c11a Mon Sep 17 00:00:00 2001 From: Guilherme Pacheco Date: Tue, 9 Oct 2018 15:50:42 -0300 Subject: [PATCH] Fix endOf day on brazilian DST start being the next day --- src/lib/moment/start-end-of.js | 2 +- src/test/moment/start_end_of.js | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lib/moment/start-end-of.js b/src/lib/moment/start-end-of.js index 02f982479a..de4e715213 100644 --- a/src/lib/moment/start-end-of.js +++ b/src/lib/moment/start-end-of.js @@ -55,5 +55,5 @@ export function endOf (units) { units = 'day'; } - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + return this.add(1, (units === 'isoWeek' ? 'week' : units)).startOf(units).subtract(1, 'ms'); } diff --git a/src/test/moment/start_end_of.js b/src/test/moment/start_end_of.js index 4b47620d63..b66f9f2b7a 100644 --- a/src/test/moment/start_end_of.js +++ b/src/test/moment/start_end_of.js @@ -347,6 +347,27 @@ test('startOf across DST +1', function (assert) { moment.updateOffset = oldUpdateOffset; }); +test('endOf across DST +1', function (assert) { + var oldUpdateOffset = moment.updateOffset, + // Based on a real story somewhere in America/Sao_Paulo + dstAt = moment('2018-11-04T00:00:00-03:00').parseZone(), + m; + + moment.updateOffset = function (mom, keepTime) { + if (mom.isBefore(dstAt)) { + mom.utcOffset(-3, keepTime); + } else { + mom.utcOffset(-2, keepTime); + } + }; + + m = moment('2018-11-04T09:00:00-02:00').parseZone(); + m.endOf('d'); + assert.equal(m.format(), '2018-11-04T23:59:59-02:00', 'endOf(\'d\') across +1'); + + moment.updateOffset = oldUpdateOffset; +}); + test('startOf across DST -1', function (assert) { var oldUpdateOffset = moment.updateOffset, // Based on a real story somewhere in America/Los_Angeles