Вот несколько решений.Мы используем today
из вопроса для проверки.В обоих случаях входом может быть вектор класса Date
.
1) Base R Определить функцию fom
, чтобы задать первое число месяца для аргумента Date
.Используя это, мы можем получить дату первого и последнего числа следующего месяца следующим образом.Мы используем факты о том, что 31 и 62 дня после первого месяца обязательно являются датой в следующем месяце и месяцем после следующего месяца.
fom <- function(x) as.Date(cut(x, "month"))
fom(fom(today) + 31)
## [1] "2009-05-01"
fom(fom(today) + 62) - 1
## [1] "2009-05-31"
2) yearmon yearmon
объекты класса внутренне представляют год и месяц как год плюс 0 для января, 1/12 для февраля, 2/12 для марта и так далее.Использование as.Date.yearmon
аргумента frac
указывает долю пути через месяц для вывода.По умолчанию используется значение frac = 0
, в результате чего выводится первое число месяца, а frac = 1
означает конец месяца.
library(zoo)
as.Date(as.yearmon(today) + 1/12)
## [1] "2009-05-01"
as.Date(as.yearmon(today) + 1/12, frac = 1)
## [1] "2009-05-31"