Конец (следующего) месяца с произвольной даты - PullRequest
2 голосов
/ 20 февраля 2020

У меня вопрос, какой самый быстрый способ получить конец месяца из дня. У меня действительно большая таблица, и я хочу, чтобы мой код был быстрым. Мой текущий код выглядит следующим образом:

library(lubridate)

end_of_month <- function(date){
 day(date) <- days_in_month(date)
 date
}

У меня есть еще один вопрос. Это быстрый способ получить последний день следующего месяца от случайной даты?

"2019-05-15" %>% as.Date() %m+% months(1) %>% end_of_month  # 2019-06-30

Могу ли я сделать это за один шаг или мне нужна дополнительная функция для этого?

1 Ответ

5 голосов
/ 20 февраля 2020

Обновленный ответ

Спасибо @Edward за указание на проблему в исходном ответе.

Вы можете использовать ceiling_date после добавления 1 месяца к оригиналу дата

ceiling_date(as.Date('2019-05-15') + months(1), unit = "month") - 1
#[1] "2019-06-30"

ceiling_date(as.Date('2019-04-15') + months(1), unit = "month") - 1
#[1] "2019-05-31"

Старый ответ

Мы можем использовать ceiling_date с unit как '2 months'

library(lubridate)
'2019-05-15' %>% as.Date() %>% ceiling_date(unit = '2 months') - 1
#[1] "2019-06-30"
...