Skip to content

Commit fefdcd4

Browse files
authored
fix: .utcOffset(0, true) result and its clone are different bug (#2505)
1 parent 1547bff commit fefdcd4

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

src/plugin/utc/index.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,21 +87,25 @@ export default (option, Dayjs, dayjs) => {
8787
}
8888
}
8989
const offset = Math.abs(input) <= 16 ? input * 60 : input
90-
let ins = this
90+
91+
if (offset === 0) {
92+
return this.utc(keepLocalTime)
93+
}
94+
95+
let ins = this.clone()
96+
9197
if (keepLocalTime) {
9298
ins.$offset = offset
93-
ins.$u = input === 0
99+
ins.$u = false
94100
return ins
95101
}
96-
if (input !== 0) {
97-
const localTimezoneOffset = this.$u
98-
? this.toDate().getTimezoneOffset() : -1 * this.utcOffset()
99-
ins = this.local().add(offset + localTimezoneOffset, MIN)
100-
ins.$offset = offset
101-
ins.$x.$localOffset = localTimezoneOffset
102-
} else {
103-
ins = this.utc()
104-
}
102+
103+
const localTimezoneOffset = this.$u
104+
? this.toDate().getTimezoneOffset() : -1 * this.utcOffset()
105+
ins = this.local().add(offset + localTimezoneOffset, MIN)
106+
ins.$offset = offset
107+
ins.$x.$localOffset = localTimezoneOffset
108+
105109
return ins
106110
}
107111

test/plugin/utc-utcOffset.test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,3 +149,21 @@ test('utc startOf', () => {
149149
expect(d2d)
150150
.toBe(1500465600000)
151151
})
152+
153+
test('cloning dates modified with utcOffset', () => {
154+
const djs = dayjs('2023-10-29T00:00:00+03:00')
155+
156+
const tests = [
157+
djs,
158+
djs.utcOffset(-240),
159+
djs.utcOffset(-240, true),
160+
djs.utcOffset(120),
161+
djs.utcOffset(120, true),
162+
djs.utcOffset(0),
163+
djs.utcOffset(0, true)
164+
]
165+
166+
tests.forEach((d) => {
167+
expect(dayjs(d).format()).toEqual(d.format())
168+
})
169+
})

0 commit comments

Comments
 (0)