diff --git a/src/index.js b/src/index.js index c6f1a84f7..df5a69312 100644 --- a/src/index.js +++ b/src/index.js @@ -39,7 +39,12 @@ const dayjs = (date, c, pl) => { } const wrapper = (date, instance) => - dayjs(date, { locale: instance.$L, utc: instance.$u, $offset: instance.$offset }) + dayjs(date, { + locale: instance.$L, + utc: instance.$u, + $offset: instance.$offset, // todo: refactor; do not use this.$offset this.$lo in you code + $lo: instance.$lo // save local utcoffset; todo: refactor + }) const Utils = U // for plugin use Utils.l = parseLocale diff --git a/src/plugin/utc/index.js b/src/plugin/utc/index.js index 40c6a4959..eb353c663 100644 --- a/src/plugin/utc/index.js +++ b/src/plugin/utc/index.js @@ -24,6 +24,9 @@ export default (option, Dayjs, dayjs) => { if (!this.$utils().u(cfg.$offset)) { this.$offset = cfg.$offset } + if (!this.$utils().u(cfg.$lo)) { + this.$lo = cfg.$lo + } oldParse.call(this, cfg) } @@ -59,6 +62,7 @@ export default (option, Dayjs, dayjs) => { const offset = Math.abs(input) <= 16 ? input * 60 : input const newD = this.add(offset + (this.$u ? 0 : localOffset), MIN) newD.$offset = offset + newD.$lo = this.$u ? 0 : localOffset newD.$u = input === 0 // UTC mode return newD } @@ -72,7 +76,7 @@ export default (option, Dayjs, dayjs) => { proto.valueOf = function () { const addedOffset = !this.$utils().u(this.$offset) - ? this.$offset + localOffset : 0 + ? this.$offset + this.$lo : 0 return this.$d.valueOf() - (addedOffset * MILLISECONDS_A_MINUTE) } diff --git a/test/plugin/utc-utcOffset.test.js b/test/plugin/utc-utcOffset.test.js index bd652be7a..a692c76a7 100644 --- a/test/plugin/utc-utcOffset.test.js +++ b/test/plugin/utc-utcOffset.test.js @@ -75,3 +75,16 @@ test('change hours when changing the utc offset in UTC mode', () => { expect(d.utcOffset(30).format('HH:mm')).toBe('07:01') expect(d.utcOffset(-1380).format('HH:mm')).toBe('07:31') }) + +test('utc costrustor', () => { + const d = new Date(2019, 8, 11, 0, 0, 0).getTime() + expect(moment(d).utc().utcOffset(480).valueOf()) + .toBe(dayjs(d).utc().utcOffset(480).valueOf()) + + expect(moment(d).utc().local() + .utcOffset(480) + .valueOf()) + .toBe(dayjs(d).utc().local() + .utcOffset(480) + .valueOf()) +})