Skip to content

Commit 33b9f3c

Browse files
committed
fix(getWeekView): use correct height for events on days where DST changes
Closes mattlewis92/angular-calendar#1348
1 parent e67a66c commit 33b9f3c

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/calendar-utils.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1002,7 +1002,11 @@ function getDayView(
10021002

10031003
const startDate: Date = startsBeforeDay ? startOfView : eventStart;
10041004
const endDate: Date = endsAfterDay ? endOfView : eventEnd;
1005-
let height: number = differenceInMinutes(endDate, startDate);
1005+
const timezoneOffset =
1006+
startDate.getTimezoneOffset() - endDate.getTimezoneOffset();
1007+
let height: number =
1008+
differenceInMinutes(endDate, startDate) + timezoneOffset;
1009+
10061010
if (!event.end) {
10071011
height = segmentHeight;
10081012
} else {

test/calendar-utils-dst.spec.ts

+20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import './util/use-london-timezone';
22
import { getWeekView } from '../src/calendar-utils';
33
import { adapterFactory as dateFnsAdapterFactory } from '../src/date-adapters/date-fns';
4+
import { startOfDay } from 'date-fns';
45

56
const dateAdapter = dateFnsAdapterFactory();
67

@@ -30,4 +31,23 @@ describe('getWeekView', () => {
3031
expect(result.hourColumns[0].hours.length).toEqual(24);
3132
expect(result).toMatchSnapshot();
3233
});
34+
35+
it('should get the correct week height on days where DST changes', () => {
36+
const result = getWeekView(dateAdapter, {
37+
viewDate: new Date('2020-10-25'),
38+
hourSegments: 2,
39+
dayStart: { hour: 0, minute: 0 },
40+
dayEnd: { hour: 23, minute: 59 },
41+
segmentHeight: 30,
42+
weekStartsOn: 0,
43+
events: [
44+
{
45+
title: '',
46+
start: startOfDay(new Date('2020-10-25')),
47+
end: startOfDay(new Date('2020-10-26')),
48+
},
49+
],
50+
});
51+
expect(result.hourColumns[0].events[0].height).toEqual(1439);
52+
});
3353
});

0 commit comments

Comments
 (0)