Date adjustments
Period
arithmetic is very powerful, but sometimes we need to express more flexible rules that are dependent on other dates. I'm thinking about last day of the next month, next Tuesday, or the third Monday of each month.
For such cases, the Dates
module exposes the adjuster API. For starters, we have the firstdayof*
and the lastdayof*
family of functions—firstdayofweek
, firstdayofmonth
, firstdayofquarter
, and firstdayofyear
; plus lastdayofweek
, lastdayofmonth
, lastdayofquarter
, and lastdayofyear
, respectively. They take as input a date/time object and adjust it to the indicated point in time:
julia> firstdayofweek(Date(2019, 1, 31))
2019-01-28
In 2019, the first day of the week includes January 31 is Monday, 28.
The lastdayof*
family of functions works in a similar manner. But useful as they are, they don't provide enough flexibility. Luckily, we're covered. If we need other dates apart from the first or the last day, we have to reach for the tonext
 and toprev
 pair of functions...