Calendar a timeZone. It’s DST-correct
via Intl.
eventsInTimeZone. Call it (or
toZonedTime for a single date) yourself if you need the shifted events outside
Calendar:
Anchor dates are local
The controlleddate prop, like every Date the calendar reads, is
interpreted in the device’s local time zone: all date math runs through
date-fns (startOfWeek, startOfMonth, …) on the local clock. Construct
anchors as local dates, not UTC instants:
week view with weekStartsOn: 1 builds the week of
Monday Aug 17, a full week before the one intended (Aug 24 is itself a
Monday). The same shift moves a month anchor built from
new Date("2026-08-01T00:00:00Z") into July.
timeZone doesn’t change this: it shifts how events display, never how the
date prop is read. The dates the calendar hands back (onChangeDate,
onChangeDateRange, onPressDay, …) are local dates too, so feeding them
straight back into date is always safe.
The now indicator
The current-time line follows the same zone as your events: settimeZone on
Calendar and the line lands where “now” is in that zone, not where the device
clock is. Pass now for a fixed instant instead (a server-synced clock, or a
stable value in tests); a fixed now doesn’t tick. ResourceTimeline takes the
same showNowIndicator / now / timeZone props and draws its line across the
lanes whenever the board’s date is that zone’s today.