Skip to content

Commit

Permalink
fix days till calculation when event is not whole day event (#243)
Browse files Browse the repository at this point in the history
  • Loading branch information
idaho committed Mar 1, 2024
1 parent c04061a commit 6e3b064
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/cards/trash-card/items/icon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class IconCard extends BaseItemElement<{ nextEvent: boolean }> {
futureEvent: !this.item.nextEvent
};

const daysLeft = daysTill(item);
const daysLeft = daysTill(new Date(), item);

const pictureUrl = this.getPictureUrl();

Expand Down
78 changes: 78 additions & 0 deletions src/utils/daysTill.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/* eslint-disable @typescript-eslint/naming-convention */
import { daysTill } from './daysTill';

import type { CalendarItem } from './calendarItem';

describe('daysTill', (): void => {
test('2 days till whole day events', async () => {
const date = new Date(`1970-01-02T00:00:00.000`);

const item = {
date: {
start: new Date(`1970-01-04T00:00:00.000`)
}
} as CalendarItem;

const result = daysTill(date, item);

expect(result).toEqual(2);
});

test('2 days till event at the evening', async () => {
const date = new Date(`1970-01-02T00:00:00.000`);

const item = {
date: {
start: new Date(`1970-01-04T22:00:00.000`)
}
} as CalendarItem;

const result = daysTill(date, item);

expect(result).toEqual(2);
});

test('2 days till event during leap ear', async () => {
const date = new Date(`2024-02-28T00:00:00.000`);

const item = {
date: {
start: new Date(`2024-03-01T00:00:00.000`)
}
} as CalendarItem;

const result = daysTill(date, item);

expect(result).toEqual(2);
});

describe('calculate correct during time changeover', (): void => {
test('from normal to day light saving', async () => {
const date = new Date(`2024-03-30T00:00:00.000`);

const item = {
date: {
start: new Date(`2024-04-01T00:00:00.000`)
}
} as CalendarItem;

const result = daysTill(date, item);

expect(result).toEqual(2);
});

test('from day light saving to normal', async () => {
const date = new Date(`2024-10-26T00:00:00.000`);

const item = {
date: {
start: new Date(`2024-10-29T00:00:00.000`)
}
} as CalendarItem;

const result = daysTill(date, item);

expect(result).toEqual(3);
});
});
});
12 changes: 9 additions & 3 deletions src/utils/daysTill.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
import type { CalendarItem } from './calendarItem';

const daysTill = (item: CalendarItem) => {
const daysTill = (from: Date, item: CalendarItem) => {
const oneDay = 24 * 60 * 60 * 1_000;

const todayMorning = new Date();
const todayMorning = new Date(from.getTime());

todayMorning.setHours(0);
todayMorning.setMinutes(0);
todayMorning.setSeconds(0);

return Math.round(Math.abs((todayMorning.getTime() - item.date.start.getTime()) / oneDay));
const startTimeMorning = new Date(item.date.start.getTime());

startTimeMorning.setHours(0);
startTimeMorning.setMinutes(0);
startTimeMorning.setSeconds(0);

return Math.round(Math.abs((todayMorning.getTime() - startTimeMorning.getTime()) / oneDay));
};

export {
Expand Down
2 changes: 1 addition & 1 deletion src/utils/getDateString.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ const getDateString = (item: CalendarItem, excludeTime?: boolean, dayStyle?: Tra
}

if (dayStyle === 'counter') {
const daysLeft = daysTill(item);
const daysLeft = daysTill(new Date(), item);

return `${customLocalize(`card.trash.daysleft${daysLeft > 1 ? '_more' : ''}${startTime && !excludeTime ? '_from_till' : ''}`).replace('<DAYS>', `${daysLeft}`).replace('<START>', startTime ?? '').replace('<END>', endTime ?? '')}`;
}
Expand Down

0 comments on commit 6e3b064

Please sign in to comment.