Skip to content

Commit 423df2f

Browse files
committed
moved modified_date_to_compare out of function to prevent creating a new instance on each change
1 parent 7994576 commit 423df2f

File tree

2 files changed

+14
-12
lines changed

2 files changed

+14
-12
lines changed

packages/svelte/src/reactivity/date.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { make_reactive } from './utils.js';
22

3+
const modified_date_to_compare = new Date();
34
/**
45
* we have to create a new Date to compare, because setting `X` might or might not affect `Y`
56
* for instance calling `date.setMonth(55)` will also change the `date.getYear()`
@@ -12,57 +13,57 @@ import { make_reactive } from './utils.js';
1213
* @return {boolean} - returns true if any changes happened
1314
*/
1415
const notify_datetime_changes = (options, ...params) => {
16+
modified_date_to_compare.setTime(options.value.getTime());
17+
1518
let is_time_changed = false;
1619
let is_date_changed = false;
1720

18-
const new_datetime = new Date(options.value);
19-
2021
// @ts-ignore
21-
new_datetime[options.property](...params);
22+
modified_date_to_compare[options.property](...params);
2223

23-
if (options.value.getFullYear() !== new_datetime.getFullYear()) {
24+
if (options.value.getFullYear() !== modified_date_to_compare.getFullYear()) {
2425
options.notify_read_properties(['getFullYear', 'getUTCFullYear']);
2526
is_date_changed = true;
2627
}
2728

2829
// @ts-expect-error
29-
if (options.value.getYear && options.value.getYear() !== new_datetime.getYear()) {
30+
if (options.value.getYear && options.value.getYear() !== modified_date_to_compare.getYear()) {
3031
// @ts-expect-error
3132
options.notify_read_properties(['getYear']);
3233
is_date_changed = true;
3334
}
3435

35-
if (options.value.getMonth() !== new_datetime.getMonth()) {
36+
if (options.value.getMonth() !== modified_date_to_compare.getMonth()) {
3637
options.notify_read_properties(['getMonth', 'getUTCMonth']);
3738
is_date_changed = true;
3839
}
3940

40-
if (options.value.getDate() !== new_datetime.getDate()) {
41+
if (options.value.getDate() !== modified_date_to_compare.getDate()) {
4142
options.notify_read_properties(['getDate', 'getUTCDate']);
4243
is_date_changed = true;
4344
}
4445

45-
if (options.value.getDay() !== new_datetime.getDay()) {
46+
if (options.value.getDay() !== modified_date_to_compare.getDay()) {
4647
options.notify_read_properties(['getDay', 'getUTCDay']);
4748
is_date_changed = true;
4849
}
4950

50-
if (options.value.getHours() !== new_datetime.getHours()) {
51+
if (options.value.getHours() !== modified_date_to_compare.getHours()) {
5152
options.notify_read_properties(['getHours', 'getUTCHours']);
5253
is_time_changed = true;
5354
}
5455

55-
if (options.value.getMinutes() !== new_datetime.getMinutes()) {
56+
if (options.value.getMinutes() !== modified_date_to_compare.getMinutes()) {
5657
options.notify_read_properties(['getMinutes', 'getUTCMinutes']);
5758
is_time_changed = true;
5859
}
5960

60-
if (options.value.getSeconds() !== new_datetime.getSeconds()) {
61+
if (options.value.getSeconds() !== modified_date_to_compare.getSeconds()) {
6162
options.notify_read_properties(['getSeconds', 'getUTCSeconds']);
6263
is_time_changed = true;
6364
}
6465

65-
if (options.value.getMilliseconds() !== new_datetime.getMilliseconds()) {
66+
if (options.value.getMilliseconds() !== modified_date_to_compare.getMilliseconds()) {
6667
options.notify_read_properties(['getMilliseconds', 'getUTCMilliseconds']);
6768
is_time_changed = true;
6869
}

packages/svelte/src/reactivity/date.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,7 @@ test('date fine grained tests', () => {
612612
const cleanup = effect_root(() => {
613613
for (const key of Object.keys(changes)) {
614614
render_effect(() => {
615+
// @ts-ignore
615616
date[key]();
616617
assert.equal(changes[key], true, `${test_description}: for ${key}`);
617618
});

0 commit comments

Comments
 (0)