Multiple calendars and float

Last reviewed 9 September 20262,024 words9 min read

Why float goes strange across calendars on one path

🟩 In one line: P6 measures each activity's float in that activity's own calendar, so one continuous path can show 0, 1 and 2 days float in consecutive activities with nothing wrong β€” and if you define "critical" as float ≀ 0, the critical path will appear to break.

πŸ‘€ Who this is for: J/M. You should already understand total float and the difference between critical path and longest path.

e / c
First, let's be honest about why this page exists

The first time a junior planner filters for total float ≀ 0 on a job with a 7-day curing calendar and a 5-day consultant calendar, they see a critical path with holes in it. Then they spend a day adding constraints or changing lags to "fix" it. Nothing is broken. P6 is doing exactly what it should; the display is just being read wrongly.

The second reason is contractual. Employer reviewers regularly reject programmes because "the critical path is discontinuous" or because a curing activity shows 2 days float "so it can't be critical". You need to be able to explain, in one paragraph, why that float is a calendar artefact and not slack.

🟨 The standard β€” what "good" looks like
SourceWhat it says (paraphrased)
P6 Professional User Guide β€” Schedule Options, General tabCritical activities can be defined either by total float threshold or by Longest Path. Total float is calculated and displayed in the activity's assigned calendar.
AACE RP 49R-06, Identifying the Critical PathWhere a network uses more than one calendar, float-based identification can misstate the critical path; the longest-path method is the reliable test.
DCMA 14-Point Assessment β€” Metric 12 (Critical Path Test)The critical path must be continuous and responsive: extend a critical activity and the finish should move by the same amount. Calendar float gaps fail this test if the path is identified by float alone.
GAO Schedule Assessment Guide β€” Best Practices 6 and 7The critical path must be valid and continuous; float values must be reasonable and explainable. Unexplained float on a driving activity is a finding.
PMI Practice Standard for Scheduling, 3rd ed. β€” calendars componentEvery activity carries a calendar; the number of calendars should be the minimum needed to model real working patterns.

🟒 Rule: on any schedule with more than one calendar, define critical activities as Longest Path and report float at the milestone, not activity by activity.

How it actually works

1. Float lives in hours, is shown in days. Everything in the XER is stored in hours. Total float on an activity is late finish minus early finish, measured in that activity's calendar, then divided by that calendar's hours per day for display. A 24-hour curing calendar shows 48 hours of float as 2 days. A 10-hour structure calendar shows 10 hours of float as 1 day. Both may describe the same two calendar days of slack.

2. Non-working days create float upstream. This is the one that catches people. If an activity on a 7-day calendar finishes on a Thursday and its successor is on a 5-day calendar (Friday and Saturday off), the successor cannot start until Sunday. So the 7-day activity could finish on Friday or Saturday and change nothing. P6 correctly gives it 2 days of late-finish room β€” 2 days total float. And because late dates flow backwards, every activity upstream of that point inherits a day or so of float as well. The path is still the longest path. It simply has weekend slack baked into it by the downstream calendar.

3. Hours-per-day mismatches do the same thing in miniature. An activity on a 10-hour calendar feeding one on an 8-hour calendar will show fractional float β€” 0.2 days, 0.8 days β€” because the working-hour boundaries don't align. This is harmless but looks untidy in a client report.

4. What to change in P6.

SettingPathWhat to set
Critical definitionTools β†’ Schedule β†’ Options β†’ General β†’ Define critical activities asLongest Path. Float-based definition is fine on a single-calendar network only.
Float displayEdit β†’ User Preferences β†’ Time Units β†’ Use assigned calendar to specify the number of work hours for each time periodTicked. Otherwise P6 converts every activity's float at one fixed hours/day and a 168-hour curing float displays as 21 "days".
Multiple float pathsTools β†’ Schedule β†’ Options β†’ AdvancedUse when you need the second and third paths; see p6-multiple-float-paths.
Critical float thresholdProject β†’ Details β†’ Settings β†’ Critical activities have float less than or equal toLeave at 0. Raising it to 2 days to "close the gaps" also hides genuine near-critical work.

5. Reduce the number of calendars. Most building jobs need three to five: a 6-day site calendar (with summer hours and Ramadan exceptions), a 7-day calendar for curing and other elapsed-time activities, a 5-day calendar for consultant and authority actions where the contract genuinely specifies working days, and perhaps a 24-hour calendar for shutdown or continuous-pour work. Check the contract before giving the consultant a 5-day calendar at all: if review periods are stated in calendar days (FIDIC 2017 Cl 5.2.2 states 21 days for Contractor's Documents review β€” verify per edition), the review activity belongs on a 7-day calendar and the artefact disappears.

6. Report float at the milestone. Negative float suffers the same distortion β€” a milestone on the project calendar can show βˆ’12 days while an upstream curing activity shows βˆ’15. In the narrative, quote the float on the contractual milestone and describe the driving path as a sequence of activity IDs. Never quote a per-activity float value from the middle of a multi-calendar path as if it were the project's float.

πŸŸ₯ Where people go wrong
  1. Filtering on total float ≀ 0 and calling it the critical path. On a multi-calendar network this filter will drop driving activities. Use Longest Path or the DCMA critical path test, not the float column.
  1. Adding a constraint to "close the gap". A Finish On constraint on the curing activity does remove the 2 days float β€” and adds a constraint you'll have to justify at every review. The gap wasn't a defect.
  1. Raising the critical float threshold project-wide. Setting it to 3 days hides the calendar gaps and also hides every genuinely near-critical path. You've traded a cosmetic problem for a real blind spot.
  1. Giving the consultant a 5-day calendar out of habit. If the contract measures review periods in calendar days, this is wrong on the merits and it injects weekend float into every upstream chain.
  1. Reporting an activity's float as the project's float. The employer reads "Cure L5 slab β€” TF 2 days" and concludes the project has 2 days in hand. It might have zero. Report at the milestone.
  1. Unticking the time-units preference to get "clean" numbers. You'll get whole numbers everywhere and they'll all be wrong for any activity not on the default calendar.
  1. Too many calendars. Eleven calendars on a mid-rise, one per subcontractor, guarantees float that nobody can explain. Consolidate to the pattern of work, not the name of the firm.
βš–οΈ When you're challenged

"Your critical path is broken β€” the curing activity shows 2 days float." The curing activity is on a 7-day calendar and the inspection that follows it is on the consultant's 5-day calendar, so curing that finishes Thursday, Friday or Saturday all lead to the same Sunday inspection. Those 2 days are weekend, not slack. The activity is on the longest path; the Longest Path filter shows the chain continuous, and I've attached it.

"Why does float jump from 1 day to 2 days and back to 0 along one chain?" Because each activity's float is measured in its own calendar. The 6-day activities see one working day of room, the 7-day activity sees two calendar days, and the 5-day inspection has none. Same slack, three rulers.

"Then put it all on one calendar so we can read it." Curing takes seven calendar days whether or not anyone is on site, and structure work stops on Fridays. One calendar would misstate one of those. I'd rather keep both and define critical by Longest Path, which is what the schedule specification asks for anyway.

"Can you just constrain the milestone so the float reads consistently?" The completion milestone already carries a Finish On or Before constraint against the contract date; that's where the project float is read. I won't constrain intermediate activities to tidy the display β€” every one of those would be a reviewer comment next month.

πŸ“„ Related pages
✏️ Worked example

A hospital extension in Riyadh. Three calendars in play on the structure: a 6-day 10-hour site calendar (Friday off), a 7-day 24-hour curing calendar, and the consultant's 5-day 8-hour calendar (Friday and Saturday off). Level 5 slab sequence, data date Sunday 8 June 2025, all FS with zero lag.

IDActivityCalendarEarly startEarly finishLate finishTF shownOn longest path?
A2100Fix rebar L56-day 10hSun 8 JunMon 9 JunTue 10 Jun1 dYes
A2110Pour L5 slab6-day 10hTue 10 JunThu 12 JunSat 14 Jun1 dYes
A2120Cure L57-day 24hFri 13 JunThu 19 JunSat 21 Jun2 dYes
A2130Consultant inspection L55-day 8hSun 22 JunSun 22 JunSun 22 Jun0 dYes
A2140Strip formwork L56-day 10hMon 23 JunWed 25 JunWed 25 Jun0 dYes

What happened: curing finishes Thursday; the inspection can't happen until Sunday. So curing could finish Saturday with no effect β€” 2 days late-finish room. Pushing that back, the pour could finish Saturday 14th (Friday isn't a working day for the pour, so that's one working day later), and rebar could finish Tuesday 10th. Every upstream activity picks up a day of float from a downstream weekend.

The float ≀ 0 filter shows: A2130 and A2140 only. Three of five driving activities disappear.

The Longest Path filter shows: all five, continuous, and the DCMA Metric 12 test confirms it β€” add 10 days to A2100 and A2140 finishes 10 working days later.

The fix applied: the contract's review period for inspection requests was 2 calendar days, not 1 working day, so A2130 was moved to the 7-day calendar with a 2-day duration. Result: Thursday finish on curing, Friday–Saturday inspection window, Sunday strip. Float upstream returned to 0 across the chain, and nobody had to add a constraint.

πŸ“– References
  • Oracle Primavera P6 Professional User Guide β€” Schedule Options; User Preferences, Time Units; Project Details, Settings tab.
  • AACE International RP 49R-06, Identifying the Critical Path.
  • DCMA 14-Point Schedule Assessment β€” Metric 12, Critical Path Test.
  • GAO-16-89G, Schedule Assessment Guide β€” Best Practices 6 and 7.
  • PMI, Practice Standard for Scheduling, 3rd ed. β€” schedule model components (calendars).
  • FIDIC Conditions of Contract for Construction, 2017 β€” Cl 5.2.2 (check the edition in your contract).

From the field

Experience from working planners. Unreviewed β€” read it as experience, not guidance.

Add what you know about multiple calendars and float. What worked, what the consultant pushed back on, what you would do differently next time. A paragraph is plenty.

Contributors get their name and one link on the site β€” your own templates, course or consultancy. We take nothing and hold nothing.

Add your experience