Получение даты начала предыдущего месяца и даты окончания с текущей даты в 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()