week, date, calendar, time, calendar, calendar, calendar, calendar, calendar. The set formula for combining closure layers into a single workday count
Photo by handikapinfo on Pixabay

Maintenance

Part of Who actually publishes the state calendars that set a deadline?

The set formula for combining closure layers into a single workday count

Set rules for layering closure calendars into a workday count: rest days first, then the union of every applicable list, with a hypothetical worked March example.

Layering calendars is not harder arithmetic. It is the same count with a bigger closure set, and the whole difficulty is in building that set correctly and being able to explain it afterward.

Nothing here computes for you. It gives the order of operations, the set rules, and worked figures you can reproduce.

What to take away

  • Remove rest days first, then remove the union of every closure list that applies. Order matters only in that a rest day already removed cannot be removed again.
  • Keep each layer as its own list. Merging them at rest destroys the only record of why a day was closed.
  • Overlap is normal and harmless. A day closed by two layers is one closed day, and a set union says so without any special handling.

The order of operations

open(span) = { d in span : weekday(d) not in R }
           minus  ( C_national  union  C_regional  union  C_local  union  C_own )

Rest days come out first because they are a property of the week rather than of a list. Everything else is a union of date sets, and union is the right operator because it is idempotent: adding the same date twice changes nothing, which is exactly what you want when two layers name the same day.

Counting the union of dates rather than summing the sizes of the lists is the whole fix, and it is the same property that makes a retried operation safe.

Worked example (hypothetical)

A hypothetical arrangement, used only to show the arithmetic. The March table is not any jurisdiction's actual calendar.

Order of Operations

  1. Start with open days in span
  2. Remove weekend rest days
  3. Union all closure lists
  4. Subtract union from open days

Take March 2027, a Saturday and Sunday weekend. The month has 23 weekdays. Suppose one national closure falls on Wednesday the 10th, and a regional layer adds Wednesday the 17th and also repeats the 10th.

Worked example

Closure dates in force

Rest days only
none
National
the 10th
National and regional
the 10th and the 17th

Open days in March

Rest days only
23
National
22
National and regional
21

The regional layer names two dates and removes one day, because one of its dates was already gone. A system that subtracted two would report 20, and 20 is not a defensible answer for any arrangement of those inputs.

The same arrangement applies to a deadline rather than a count: ten business days after Friday the 5th is Friday the 19th with no closures, Monday the 22nd with the national layer, and Tuesday the 23rd with both.

Each added closure pushes the answer by one open day. That push lands on a Monday or Tuesday because the weekend absorbs the shift. The day-stepping arithmetic behind that is under adding business days.

One real set, for reference. The U.S. Office of Personnel Management publishes the federal holiday schedule, and its 2025 list has 11 days, all of them on weekdays.

Federal holiday, 2025

Federal holiday, 2025DateWeekday
New Year's DayJanuary 1Wednesday
Martin Luther King, Jr. DayJanuary 20Monday
Washington's BirthdayFebruary 17Monday
Memorial DayMay 26Monday
JuneteenthJune 19Thursday
Independence DayJuly 4Friday
Labor DaySeptember 1Monday
Columbus DayOctober 13Monday
Veterans DayNovember 11Tuesday
Thanksgiving DayNovember 27Thursday
Christmas DayDecember 25Thursday

2025 has 261 weekdays. Remove the 11 federal days and 250 open days remain. No observed-date shift applies, because no listed day falls on a weekend in 2025.

Keep the layers separate

Merging the lists at rest saves nothing and costs the ability to answer three questions: which layer closed a given day, which layer changed when a count moved, and which layers apply to a different office in the same organization.

Store each list with its own publisher, scope and retrieval date, and take the union at the moment of calculation. The union is cheap. Reconstructing a merged list into its parts is not possible at all.

LayerTypical publisherTypical scope
NationalThe body named in the enacting instrumentEveryone, or one class of body
RegionalA sub-national governmentThat region
LocalA city or a court districtThat district
OrganizationalThe employer or the counterpartyOne organization

The distinction between a layer's publisher and the instrument that enacted its days is set out under how national closure lists are made.

Intersection is a different question

Union answers "which days is nothing open". Intersection answers a question about two parties: which days are both of them open. Those are different sets and they are not each other's opposites.

For a deadline where two offices must both act, the open set is the intersection of their open sets. That equals removing the union of their closures and their combined rest days.

For a hand-off where either can act, it is the union of their open sets. Which applies is a decision about the obligation, not the calendar, and it should be written down where someone can disagree.

The scope question the formula cannot answer

The formula takes a list of lists. It cannot tell you which lists belong in that list, and that is the hard part.

A closure that binds courts does not necessarily bind banks. A regional closure may apply to public offices and not to private employers.

Whoever publishes each layer states its scope. Applying a layer outside that scope produces a count that is confidently and unarguably wrong. The reasoning about who publishes what is under state and regional calendars, and the underlying legal category of a working day is under business day.

Where to fetch each layer's list:

The scope question

  • Nationalthe U.S. Office of Personnel Management publishes the federal holiday schedule. State legislatures publish their statutory holiday lists.
  • State courtseach state's administrative office of the courts publishes closure orders that bind court business. California publishes its court holidays through the Judicial Council of California.
  • Localcity, county and school district sites publish office and facility closures.
  • Organizationalthe employer or the counterparty publishes its own calendar.

Where the counting is in hours rather than days, a layer can also shorten a day rather than remove it, and that case has no representation at day resolution. It is under working hours. The base weekday count that all of this subtracts from is under counting a month.

When the count is in days, a partial-day or hour-based closure is held as a note against that date rather than as a removal, unless it covers the whole working day.

Common questions

Does the order of the layers matter?

Not for the result. It matters for the record: the layer that first removed a day is worth storing, because it is what someone will ask about.

What if two layers disagree about whether a day is closed?

They cannot, in the union model. A day is closed if any applicable layer closes it. Disagreement is really a scope question: one of the layers does not apply to your obligation.

How many layers is too many?

There is no arithmetic limit. The practical limit is how many you can name a publisher and a retrieval date for, and a layer without those cannot be defended.

Can a layer add an open day rather than remove one?

Only if the obligation says so, and it is unusual. Modeling it needs an explicit exception rather than a negative closure, because a negative entry in a union set has no meaning.

More in Maintenance

Latest from Planning Desk