happy-dom 12.10.2 → 12.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of happy-dom might be problematic. Click here for more details.

@@ -7,21 +7,22 @@ class HTMLInputElementDateUtility {
7
7
  /**
8
8
  * Returns iso week number from given date
9
9
  *
10
+ * @see https://stackoverflow.com/a/6117889
10
11
  * @param date Date or number.
11
12
  * @returns Iso-week string.
12
13
  */
13
14
  static dateIsoWeek(date) {
14
- date = new Date(date);
15
- const day = (date.getUTCDay() + 6) % 7;
16
- date.setUTCDate(date.getUTCDate() - day + 3);
17
- const firstThursday = date.getTime();
18
- date.setUTCMonth(0, 1);
19
- if (date.getDay() !== 4) {
20
- date.setUTCMonth(0, 1 + ((4 - date.getDay() + 7) % 7));
21
- }
22
- return (date.getUTCFullYear() +
23
- '-W' +
24
- String(1 + Math.ceil((firstThursday - date.getTime()) / 604800000)).padStart(2, '0'));
15
+ date = typeof date === 'number' ? new Date(date) : date;
16
+ // Copy date so don't modify original
17
+ date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
18
+ // Set to nearest Thursday: current date + 4 - current day number
19
+ // Make Sunday's day number 7
20
+ date.setUTCDate(date.getUTCDate() + 4 - (date.getUTCDay() || 7));
21
+ // Get first day of year
22
+ const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
23
+ // Calculate full weeks to nearest Thursday
24
+ const weekNo = Math.ceil(((date - yearStart) / 86400000 + 1) / 7);
25
+ return `${date.getUTCFullYear()}-W${weekNo < 10 ? '0' : ''}${weekNo}`;
25
26
  }
26
27
  /**
27
28
  * Returns a date object for monday of given iso week string (\d\d\d\d-W\d\d)
@@ -37,7 +38,7 @@ class HTMLInputElementDateUtility {
37
38
  }
38
39
  const date = new Date(`${Y}-01-01T00:00Z`);
39
40
  const jan4th = new Date(`${Y}-01-04T00:00Z`);
40
- const jan4thDay = (jan4th.getDay() + 6) % 7;
41
+ const jan4thDay = (jan4th.getUTCDay() + 6) % 7;
41
42
  const ordinalDate = 1 + (Number(W) - 1) * 7 - jan4thDay + 3;
42
43
  date.setUTCDate(ordinalDate);
43
44
  if (date.getUTCFullYear() > Number(Y)) {
@@ -1 +1 @@
1
- {"version":3,"file":"HTMLInputElementDateUtility.cjs","sourceRoot":"","sources":["../../../src/nodes/html-input-element/HTMLInputElementDateUtility.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,MAAqB,2BAA2B;IAC/C;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,IAAmB;QAC5C,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACvD;QACD,OAAO,CACN,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI;YACJ,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CACpF,CAAC;IACH,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,OAAe;QACxC,qEAAqE;QACrE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAChD,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;SAC/C;QACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACtC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;SAC/C;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AA5CD,8CA4CC"}
1
+ {"version":3,"file":"HTMLInputElementDateUtility.cjs","sourceRoot":"","sources":["../../../src/nodes/html-input-element/HTMLInputElementDateUtility.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,MAAqB,2BAA2B;IAC/C;;;;;;OAMG;IACI,MAAM,CAAC,WAAW,CAAC,IAAmB;QAC5C,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,qCAAqC;QACrC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/E,iEAAiE;QACjE,6BAA6B;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CACvB,CAAC,CAAmB,IAAK,GAAqB,SAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAC7E,CAAC;QACF,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;IACvE,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,OAAe;QACxC,qEAAqE;QACrE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAChD,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;SAC/C;QACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACtC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;SAC/C;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AA9CD,8CA8CC"}
@@ -5,6 +5,7 @@ export default class HTMLInputElementDateUtility {
5
5
  /**
6
6
  * Returns iso week number from given date
7
7
  *
8
+ * @see https://stackoverflow.com/a/6117889
8
9
  * @param date Date or number.
9
10
  * @returns Iso-week string.
10
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"HTMLInputElementDateUtility.d.ts","sourceRoot":"","sources":["../../../src/nodes/html-input-element/HTMLInputElementDateUtility.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC/C;;;;;OAKG;WACW,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM;IAetD;;;;;OAKG;WACW,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAgBhD"}
1
+ {"version":3,"file":"HTMLInputElementDateUtility.d.ts","sourceRoot":"","sources":["../../../src/nodes/html-input-element/HTMLInputElementDateUtility.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC/C;;;;;;OAMG;WACW,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM;IAgBtD;;;;;OAKG;WACW,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAgBhD"}
package/cjs/version.cjs CHANGED
@@ -1 +1 @@
1
- module.exports = { default: { version: '12.10.2' } };
1
+ module.exports = { default: { version: '12.10.3' } };
@@ -5,6 +5,7 @@ export default class HTMLInputElementDateUtility {
5
5
  /**
6
6
  * Returns iso week number from given date
7
7
  *
8
+ * @see https://stackoverflow.com/a/6117889
8
9
  * @param date Date or number.
9
10
  * @returns Iso-week string.
10
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"HTMLInputElementDateUtility.d.ts","sourceRoot":"","sources":["../../../src/nodes/html-input-element/HTMLInputElementDateUtility.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC/C;;;;;OAKG;WACW,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM;IAetD;;;;;OAKG;WACW,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAgBhD"}
1
+ {"version":3,"file":"HTMLInputElementDateUtility.d.ts","sourceRoot":"","sources":["../../../src/nodes/html-input-element/HTMLInputElementDateUtility.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC/C;;;;;;OAMG;WACW,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM;IAgBtD;;;;;OAKG;WACW,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAgBhD"}
@@ -5,21 +5,22 @@ export default class HTMLInputElementDateUtility {
5
5
  /**
6
6
  * Returns iso week number from given date
7
7
  *
8
+ * @see https://stackoverflow.com/a/6117889
8
9
  * @param date Date or number.
9
10
  * @returns Iso-week string.
10
11
  */
11
12
  static dateIsoWeek(date) {
12
- date = new Date(date);
13
- const day = (date.getUTCDay() + 6) % 7;
14
- date.setUTCDate(date.getUTCDate() - day + 3);
15
- const firstThursday = date.getTime();
16
- date.setUTCMonth(0, 1);
17
- if (date.getDay() !== 4) {
18
- date.setUTCMonth(0, 1 + ((4 - date.getDay() + 7) % 7));
19
- }
20
- return (date.getUTCFullYear() +
21
- '-W' +
22
- String(1 + Math.ceil((firstThursday - date.getTime()) / 604800000)).padStart(2, '0'));
13
+ date = typeof date === 'number' ? new Date(date) : date;
14
+ // Copy date so don't modify original
15
+ date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
16
+ // Set to nearest Thursday: current date + 4 - current day number
17
+ // Make Sunday's day number 7
18
+ date.setUTCDate(date.getUTCDate() + 4 - (date.getUTCDay() || 7));
19
+ // Get first day of year
20
+ const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
21
+ // Calculate full weeks to nearest Thursday
22
+ const weekNo = Math.ceil(((date - yearStart) / 86400000 + 1) / 7);
23
+ return `${date.getUTCFullYear()}-W${weekNo < 10 ? '0' : ''}${weekNo}`;
23
24
  }
24
25
  /**
25
26
  * Returns a date object for monday of given iso week string (\d\d\d\d-W\d\d)
@@ -35,7 +36,7 @@ export default class HTMLInputElementDateUtility {
35
36
  }
36
37
  const date = new Date(`${Y}-01-01T00:00Z`);
37
38
  const jan4th = new Date(`${Y}-01-04T00:00Z`);
38
- const jan4thDay = (jan4th.getDay() + 6) % 7;
39
+ const jan4thDay = (jan4th.getUTCDay() + 6) % 7;
39
40
  const ordinalDate = 1 + (Number(W) - 1) * 7 - jan4thDay + 3;
40
41
  date.setUTCDate(ordinalDate);
41
42
  if (date.getUTCFullYear() > Number(Y)) {
@@ -1 +1 @@
1
- {"version":3,"file":"HTMLInputElementDateUtility.js","sourceRoot":"","sources":["../../../src/nodes/html-input-element/HTMLInputElementDateUtility.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC/C;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,IAAmB;QAC5C,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACvD;QACD,OAAO,CACN,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI;YACJ,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CACpF,CAAC;IACH,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,OAAe;QACxC,qEAAqE;QACrE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAChD,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;SAC/C;QACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACtC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;SAC/C;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
1
+ {"version":3,"file":"HTMLInputElementDateUtility.js","sourceRoot":"","sources":["../../../src/nodes/html-input-element/HTMLInputElementDateUtility.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC/C;;;;;;OAMG;IACI,MAAM,CAAC,WAAW,CAAC,IAAmB;QAC5C,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,qCAAqC;QACrC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/E,iEAAiE;QACjE,6BAA6B;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CACvB,CAAC,CAAmB,IAAK,GAAqB,SAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAC7E,CAAC;QACF,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;IACvE,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,OAAe;QACxC,qEAAqE;QACrE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAChD,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;SAC/C;QACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACtC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;SAC/C;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
package/lib/version.js CHANGED
@@ -1 +1 @@
1
- export default { version: '12.10.2' };
1
+ export default { version: '12.10.3' };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-dom",
3
- "version": "12.10.2",
3
+ "version": "12.10.3",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/capricorn86/happy-dom",
6
6
  "repository": "https://github.com/capricorn86/happy-dom",
@@ -5,24 +5,26 @@ export default class HTMLInputElementDateUtility {
5
5
  /**
6
6
  * Returns iso week number from given date
7
7
  *
8
+ * @see https://stackoverflow.com/a/6117889
8
9
  * @param date Date or number.
9
10
  * @returns Iso-week string.
10
11
  */
11
12
  public static dateIsoWeek(date: Date | number): string {
12
- date = new Date(date);
13
- const day = (date.getUTCDay() + 6) % 7;
14
- date.setUTCDate(date.getUTCDate() - day + 3);
15
- const firstThursday = date.getTime();
16
- date.setUTCMonth(0, 1);
17
- if (date.getDay() !== 4) {
18
- date.setUTCMonth(0, 1 + ((4 - date.getDay() + 7) % 7));
19
- }
20
- return (
21
- date.getUTCFullYear() +
22
- '-W' +
23
- String(1 + Math.ceil((firstThursday - date.getTime()) / 604800000)).padStart(2, '0')
13
+ date = typeof date === 'number' ? new Date(date) : date;
14
+ // Copy date so don't modify original
15
+ date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
16
+ // Set to nearest Thursday: current date + 4 - current day number
17
+ // Make Sunday's day number 7
18
+ date.setUTCDate(date.getUTCDate() + 4 - (date.getUTCDay() || 7));
19
+ // Get first day of year
20
+ const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
21
+ // Calculate full weeks to nearest Thursday
22
+ const weekNo = Math.ceil(
23
+ ((<number>(<unknown>date) - <number>(<unknown>yearStart)) / 86400000 + 1) / 7
24
24
  );
25
+ return `${date.getUTCFullYear()}-W${weekNo < 10 ? '0' : ''}${weekNo}`;
25
26
  }
27
+
26
28
  /**
27
29
  * Returns a date object for monday of given iso week string (\d\d\d\d-W\d\d)
28
30
  *
@@ -37,7 +39,7 @@ export default class HTMLInputElementDateUtility {
37
39
  }
38
40
  const date = new Date(`${Y}-01-01T00:00Z`);
39
41
  const jan4th = new Date(`${Y}-01-04T00:00Z`);
40
- const jan4thDay = (jan4th.getDay() + 6) % 7;
42
+ const jan4thDay = (jan4th.getUTCDay() + 6) % 7;
41
43
  const ordinalDate = 1 + (Number(W) - 1) * 7 - jan4thDay + 3;
42
44
  date.setUTCDate(ordinalDate);
43
45
  if (date.getUTCFullYear() > Number(Y)) {