I think I have managed to go one step further in producing an 'elegant' array formula solution, built within the named formula environment. The formula for Period gives a two row array from 00:00:00 on the first day of each month to 23:59:59 on the last day, i.e. the first day of the following month.
The active part of each month is bounded by the Start/End period. According to the order of dates determined by case the time period of interest is bounded by different dates, with both start and end dates given by the CHOOSE function.
MMULT is used to subtract the row of start dates from the end dates. As a check, I have added the 12 days of (last year's) Christmas!
One day I might be able to do all this with dynamic array functionality rather than relying so heavily on the array processing capability of named formulas.