diff --git a/src/plugin/timezone/index.js b/src/plugin/timezone/index.js index b9703b2de..0c248c607 100644 --- a/src/plugin/timezone/index.js +++ b/src/plugin/timezone/index.js @@ -7,6 +7,8 @@ const typeToPos = { second: 5 } +const ms = 'ms' + export default (o, c, d) => { const localUtcOffset = d().utcOffset() const tzOffset = (timestamp, timezone) => { @@ -55,7 +57,7 @@ export default (o, c, d) => { proto.tz = function (timezone) { const target = this.toDate().toLocaleString('en-US', { timeZone: timezone }) const diff = Math.round((this.toDate() - new Date(target)) / 1000 / 60) - return d(target).utcOffset(localUtcOffset - diff, true) + return d(target).utcOffset(localUtcOffset - diff, true).$set(ms, this.$ms) } d.tz = function (input, timezone) { const previousOffset = tzOffset(+d(), timezone) diff --git a/test/plugin/timezone.test.js b/test/plugin/timezone.test.js index 21bb08f9d..ca807aa4f 100644 --- a/test/plugin/timezone.test.js +++ b/test/plugin/timezone.test.js @@ -56,6 +56,14 @@ describe('Parse', () => { expect(newYork.tz('America/Los_Angeles').format()).toBe('2014-06-01T09:00:00-07:00') expect(newYork.tz('Europe/London').format()).toBe('2014-06-01T17:00:00+01:00') }) + + it('preserve milliseconds', () => { + const d = dayjs(1596735327399) + const oldMs = d.millisecond() + const dTz = d.tz('America/New_York') + const newMs = dTz.millisecond() + expect(oldMs).toEqual(newMs) + }) }) describe('Convert', () => {