Ken, Day Division (1) will give you what you want. Lubridate does not force periods to duration when you divide intervals by periods. (Although the algorithm for finding the exact number of integer periods in an interval starts with an estimate that uses the interval divided by the analog number of durations, which may be what you notice).
The end result is the number of whole periods that correspond to the interval. A warning message warns the user that this is an estimate because there will be some part of the period that is discarded from the response. It is unreasonable to do math with a fraction of the period, since we cannot change the clock with it unless we convert it in the shortest possible time, but there is no consistent way to do the conversion. For example, the day you mention it will be equal to 23 hours, but on other days it will be equal to 24 hours. You think of the right way β periods are an attempt to respect the variations caused by DST, leap years, etc., but they only do this in whole units.
I cannot reproduce the subtraction error mentioned above. It seems to work for me.
three <- force_tz(ymd_hms("2011-03-12 12:00:00"), "") # note: here in TX, "" *is* CST (four <- three + days(1)) > [1] "2011-03-13 12:00:00 CDT" four - days(1) > [1] "2011-03-12 12:00:00 CST"
source share