From a3fe0129d1a401c1eec0e1c3d27a4388c550ffd5 Mon Sep 17 00:00:00 2001 From: iamkun Date: Sat, 26 Sep 2020 12:44:27 +0800 Subject: [PATCH 1/2] fix: update utc plugin to support keepLocalTime `.utc(true)` fix #1078 --- src/plugin/utc/index.js | 8 ++++++-- test/plugin/utc.test.js | 18 +++++++++++++++++- types/plugin/utc.d.ts | 2 +- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/plugin/utc/index.js b/src/plugin/utc/index.js index 078880491..722ae552b 100644 --- a/src/plugin/utc/index.js +++ b/src/plugin/utc/index.js @@ -7,8 +7,12 @@ export default (option, Dayjs, dayjs) => { return new Dayjs(cfg) // eslint-disable-line no-use-before-define } - proto.utc = function () { - return dayjs(this.toDate(), { locale: this.$L, utc: true }) + proto.utc = function (keepLocalTime) { + const ins = dayjs(this.toDate(), { locale: this.$L, utc: true }) + if (keepLocalTime) { + return ins.add(this.utcOffset(), MIN) + } + return ins } proto.local = function () { diff --git a/test/plugin/utc.test.js b/test/plugin/utc.test.js index a02e8c143..8b838a22d 100644 --- a/test/plugin/utc.test.js +++ b/test/plugin/utc.test.js @@ -1,8 +1,8 @@ import MockDate from 'mockdate' import moment from 'moment' import dayjs from '../../src' -import utc from '../../src/plugin/utc' import customParseFormat from '../../src/plugin/customParseFormat' +import utc from '../../src/plugin/utc' dayjs.extend(utc) @@ -250,3 +250,19 @@ describe('Diff', () => { .toBe(moment.utc(d1).diff(d2, 'm')) }) }) + +it('utc keepLocalTime', () => { + const t = '2016-05-03T22:15:01+02:00' + const d = dayjs(t).utc(true) + const m = moment(t).utc(true) + const fd = d.format() + const dd = d.toDate() + const vd = d.valueOf() + const fm = m.format() + const dm = m.toDate() + const vm = m.valueOf() + expect(fd).toEqual(fm) + expect(dd).toEqual(dm) + expect(vd).toEqual(vm) + expect(vd).toEqual(1462335301000) +}) diff --git a/types/plugin/utc.d.ts b/types/plugin/utc.d.ts index 180276175..58754d65f 100644 --- a/types/plugin/utc.d.ts +++ b/types/plugin/utc.d.ts @@ -6,7 +6,7 @@ export = plugin declare module 'dayjs' { interface Dayjs { - utc(): Dayjs + utc(keepLocalTime?: boolean): Dayjs local(): Dayjs From 414051081810df8fbe047ba5a2c6b4774f0a4aa6 Mon Sep 17 00:00:00 2001 From: iamkun Date: Sat, 26 Sep 2020 12:59:20 +0800 Subject: [PATCH 2/2] chore: update --- test/plugin/utc.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/plugin/utc.test.js b/test/plugin/utc.test.js index 8b838a22d..7ef563cd9 100644 --- a/test/plugin/utc.test.js +++ b/test/plugin/utc.test.js @@ -252,7 +252,7 @@ describe('Diff', () => { }) it('utc keepLocalTime', () => { - const t = '2016-05-03T22:15:01+02:00' + const t = '2016-05-03 22:15:01' const d = dayjs(t).utc(true) const m = moment(t).utc(true) const fd = d.format() @@ -262,7 +262,7 @@ it('utc keepLocalTime', () => { const dm = m.toDate() const vm = m.valueOf() expect(fd).toEqual(fm) + expect(fd).toEqual('2016-05-03T22:15:01Z') expect(dd).toEqual(dm) expect(vd).toEqual(vm) - expect(vd).toEqual(1462335301000) })