I have something working. One bonus is that it’s very specific about date ranges, so the {Jan}
field (I shortened the names so I could get all twelve months on the screen at once) will only work for January 2020. However, that also means that once you need to start tracking 2021, you’ll need to duplicate the 2020 fields and tweak the formulas for next year.
Conceptually it’s pretty simple—clamp the dates to only those from the range that fall within the month using MIN()
and MAX()
, then find the difference—but to execute it I had to do a lot more conversions than I anticipated. (It’s a little annoying that MIN()
and MAX()
correctly operate on dates in rollup field aggregation formulas, but not in formula fields, so I ended up converting all dates to/from their Unix timestamp equivalents to pull it off.)

Here’s the formula for January. The rest just have changes to the dates and to the final MONTH()
comparison.
IF(
AND({Start Date}, {End Date}),
IF(
AND(
{Start Date} < DATETIME_PARSE("2/1/2020"),
{End Date} >= DATETIME_PARSE("1/1/2020")
),
DATETIME_DIFF(
DATETIME_PARSE(MIN(VALUE(DATETIME_FORMAT({End Date}, "X")), VALUE(DATETIME_FORMAT(DATETIME_PARSE("2/1/2020"), "X"))), "X"),
DATETIME_PARSE(MAX(VALUE(DATETIME_FORMAT({Start Date}, "X")), VALUE(DATETIME_FORMAT(DATETIME_PARSE("1/1/2020"), "X"))), "X"),
"days"
) + (MONTH({End Date}) = 1),
0
)
)
Rather than make you mess with the formulas manually, I made a base that you can copy from.