Получение даты начала предыдущего месяца и даты окончания с текущей даты в R

Есть ли простой способ получить дату начала и дату окончания предыдущего месяца с текущей даты в R?

У меня есть только текущая дата. Из него я хочу получить предыдущий месяц, дату начала предыдущего месяца, дату окончания предыдущего месяца.

currentDate<-Sys.Date() #return today date as "2012-11-07"

Я хочу, чтобы дата начала предыдущего месяца была как 2012-10-01, так и дата окончания 2012-10-31 с сегодняшнего дня.

Ответы

Ответ 1

В нескольких пакетах есть удобные функции даты, но для их собственного использования:

Функция начала месяца:

som <- function(x) {
  as.Date(format(x, "%Y-%m-01"))
}

и функция конца месяца (хотя вам здесь это не понадобится):

eom <- function(x) {
  som(som(x) + 35) - 1
}

Это должно заставить вас идти. Например, чтобы получить конец предыдущего месяца:

som(Sys.Date()) - 1
[1] "2012-10-31"

и начало месяца:

som(som(Sys.Date()) - 1)
[1] "2012-10-01"

Ответ 2

Используя lubridate это кусок торта:

library(lubridate)
floor_date(Sys.Date() - months(1), "month")

В R. Существует много хороших библиотек. Кажется, что все, что вам нужно, уже создано.

ОБНОВЛЕННАЯ версия:

library(lubridate)
floor_date(as.Date("2011-03-29"), "month") - months(1)

Это исправлено, чтобы хорошо работать с 29 марта.

Ответ 3

Вы можете использовать библиотеку lubridate, которая очень хороша при выполнении арифметики даты.

library(lubridate)

currentDate <-Sys.Date()
# end of previous month:
eopm <- currentDate - days(day(currentDate))
# [1] "2012-10-31"

# start of previous month:
sopm <- currentDate - days(day(currentDate))
sopm <- sopm - days(day(sopm) - 1)
# [1] "2012-10-01"

Ответ 4

Другой вариант с пакетом lubridate - использовать функцию откат, которая, как говорится в описании, делает именно это.

Откат

изменяет дату на последний день предыдущего месяца или на первый день месяца. При желании новая дата может сохранять одну и ту же информацию о часах, минутах и ​​второй.

library(lubridate)

currentDate <- Sys.Date()

end_last_month <- rollback(currentDate)

init_last_month <- rollback(end_last_month, roll_to_first = TRUE)

Ответ 5

Предыдущий месяц Дата начала:

format(Sys.Date() - 30, '%Y-%m-01')

Предыдущий месяц Дата окончания:

as.Date(format(Sys.Date(), '%Y-%m-01')) - 1

Ответ 6

используйте timeperiodsR для получения даты начала и окончания любого периода.

# install.packages("timeperiodsR")
timeperiodsR::previous_month()