Lubridate Could be useful for this:
curr_date <- lubridate::ymd('20250327') lubridate::ceiling_date(lubridate::ceiling_date(curr_date, "month"), "month") - lubridate::days(1) #"2025-04-30" lubridate::ceiling_date(curr_date, "month") #"2025-04-01"