Split shifts & rotating schedules
Model split working days, overnight shifts, and repeating rotations from a time-zone-aware anchor. The planner expands shift definitions into occurrences that can be used in availability and capacity analysis.

What you configure
- profiles.shifts
- Describe shift IDs, weekdays, start/end times, and effective boundaries.
- rotation
- Set an anchor date, cycleDays, and activeDays within the cycle.
- getShiftOccurrences
- Expand a resource's shifts over a requested interval.
Integration code example
- Choose the resource time zone and define each working segment separately.
- Add rotations only where the schedule follows an anchored cycle.
- Inspect generated occurrences around overnight boundaries and daylight-saving changes.
Copy this TypeScript into your application, not the browser console. Replace YOUR_WTS_LICENSE_KEY with an entitlement issued for your deployment origin. A WTS license is not a Google, Microsoft or CalDAV credential. These examples are documentation only and never execute on this page.
npm install @wts-calendar/coreimport { verifyCalendarLicense } from '@wts-calendar/core';
import { AdvancedResourcePlanner } from '@wts-calendar/core/advanced-resource-planning';
const license = await verifyCalendarLicense('YOUR_WTS_LICENSE_KEY');
const planner = new AdvancedResourcePlanner({
license,
timeZone: 'UTC',
resources: [
{ id: 'design', title: 'Design studio', capacity: 2 },
{ id: 'engineering', title: 'Engineering', capacity: 4 },
],
events: [
{
id: 'review',
title: 'Design review',
resourceId: 'design',
start: '2026-09-07T09:00:00Z',
end: '2026-09-07T10:30:00Z',
},
],
profiles: [
{
resourceId: 'design',
shifts: [
{
id: 'morning',
startTime: '08:00',
endTime: '12:00',
rotation: { anchor: '2026-09-07', cycleDays: 4, activeDays: [0, 1] },
},
{
id: 'evening',
startTime: '16:00',
endTime: '20:00',
rotation: { anchor: '2026-09-07', cycleDays: 4, activeDays: [0, 1] },
},
],
},
],
});
export const shifts = planner.getShiftOccurrences('design', '2026-09-07', '2026-09-15');
console.table(shifts);Application responsibilities
The engine returns data, not a built-in chart. Render results in your application and call planner.setData() after resources, events or profiles change.
This sample runs two days on, two days off, with two shifts per active day. Set timeZone to your scheduling zone before expanding shifts.
Behavior and lifecycle
- An end time earlier than the start denotes an overnight shift; 24:00 is supported.
- Shift expansion uses the calendar's named-zone and effective-boundary policies.
Limits and responsibilities
- You provide the rotation pattern; the planner does not automatically generate a staffing roster.
- Employment rules and organization-specific shift requirements must be modeled and validated by your application.
Enable this capability
- Optional module
- @wts-calendar/core/advanced-resource-planning
- Signed entitlement
- advanced-resource-planning
Request the required features and deployment origins by email. Pricing and terms are confirmed privately. A WTS license is separate from provider credentials; do not send passwords or production access tokens.
Email for a license key →This public guide does not execute Premium modules or collect license tokens.