Skip to content

Commit 35ee17e

Browse files
author
Bottie McBotface
committed
fix(@axhxrx/date): fix bug caused by adding tests 😂
1 parent be4df47 commit 35ee17e

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

‎dateToIS08601WithTimeZoneOffset.test.ts‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,24 @@ Deno.test('format ignoring milliseconds', () =>
3737
const result = dateToIS08601WithTimeZoneOffset(date, testTimezoneOffset);
3838
assertEquals(result, '2023-10-01T21:00:00+09:00');
3939
});
40+
41+
Deno.test('format a valid date with an overridden time zone offset', () =>
42+
{
43+
const date = new Date('2023-10-01T12:00:00Z');
44+
const result = dateToIS08601WithTimeZoneOffset(date, 540);
45+
assertEquals(result, '2023-10-01T03:00:00-09:00');
46+
});
47+
48+
Deno.test('format a valid date with an overridden time zone offset into the previous day', () =>
49+
{
50+
const date = new Date('2023-10-01T01:00:00Z');
51+
const result = dateToIS08601WithTimeZoneOffset(date, 540);
52+
assertEquals(result, '2023-09-30T16:00:00-09:00');
53+
});
54+
55+
Deno.test('format a valid date with an overridden time zone offset into the next day', () =>
56+
{
57+
const date = new Date('2023-10-01T23:00:00Z');
58+
const result = dateToIS08601WithTimeZoneOffset(date, -480);
59+
assertEquals(result, '2023-10-02T07:00:00+08:00');
60+
});

‎dateToIS08601WithTimeZoneOffset.ts‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ export const dateToIS08601WithTimeZoneOffset = (
1919

2020
// Thanks, Obama! https://stackoverflow.com/questions/17415579/how-to-iso-8601-format-a-date-with-timezone-offset-in-javascript
2121

22-
const offset = timeZoneOffset ?? date.getTimezoneOffset();
22+
const actualOffset = date.getTimezoneOffset();
23+
const offset = timeZoneOffset ?? actualOffset;
24+
const difference = offset - actualOffset;
25+
const offsetDate = new Date(date.getTime() - (difference * 60 * 1000));
2326

2427
const tzo = -offset;
2528
const dif = tzo >= 0 ? '+' : '-';
@@ -30,17 +33,17 @@ export const dateToIS08601WithTimeZoneOffset = (
3033
};
3134

3235
return (
33-
date.getFullYear()
36+
offsetDate.getFullYear()
3437
+ '-'
35-
+ pad(date.getMonth() + 1)
38+
+ pad(offsetDate.getMonth() + 1)
3639
+ '-'
37-
+ pad(date.getDate())
40+
+ pad(offsetDate.getDate())
3841
+ 'T'
39-
+ pad(date.getHours())
42+
+ pad(offsetDate.getHours())
4043
+ ':'
41-
+ pad(date.getMinutes())
44+
+ pad(offsetDate.getMinutes())
4245
+ ':'
43-
+ pad(date.getSeconds())
46+
+ pad(offsetDate.getSeconds())
4447
+ dif
4548
+ pad(tzo / 60)
4649
+ ':'

0 commit comments

Comments
 (0)