从R中的当前日期获取上个月的开始日期和结束日期

Nan*_*ndu 21 r date

是否有任何简单的方法可以从R中的当前日期获取上个月的开始日期和结束日期?

我只有当前日期.从它,我想得到上个月,上个月的开始日期,上个月的结束日期.

currentDate<-Sys.Date() #return today's date as "2012-11-07"
Run Code Online (Sandbox Code Playgroud)

我希望上个月的开始日期为2012-10-01,结束日期为2012-10-31,从今天开始.

sea*_*ody 34

许多软件包都有方便的日期功能,但要自己动手:

月初函数:

som <- function(x) {
  as.Date(format(x, "%Y-%m-01"))
}
Run Code Online (Sandbox Code Playgroud)

和月末功能(虽然你不需要这个):

eom <- function(x) {
  som(som(x) + 35) - 1
}
Run Code Online (Sandbox Code Playgroud)

这应该让你去.例如,要获得上个月的结束:

som(Sys.Date()) - 1
[1] "2012-10-31"
Run Code Online (Sandbox Code Playgroud)

和月初:

som(som(Sys.Date()) - 1)
[1] "2012-10-01"
Run Code Online (Sandbox Code Playgroud)


Nik*_*tov 20

使用lubridate它是一块蛋糕:

library(lubridate)
floor_date(Sys.Date() - months(1), "month")
Run Code Online (Sandbox Code Playgroud)

R中有很多好的库.好像你已经创建了所需的一切.

更新后的版本:

library(lubridate)
floor_date(as.Date("2011-03-29"), "month") - months(1)
Run Code Online (Sandbox Code Playgroud)

这个更正与3月29日一起工作.


J4y*_*J4y 16

您可以使用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"
Run Code Online (Sandbox Code Playgroud)


Ica*_*ato 12

使用lubridate包的另一个选择是使用回滚功能,正如描述所说,正是这样做的.

回滚将日期更改为上个月的最后一天或该月的第一天.可选地,新日期可以保留相同的小时,分​​钟和秒信息.

library(lubridate)

currentDate <- Sys.Date()

end_last_month <- rollback(currentDate)

init_last_month <- rollback(end_last_month, roll_to_first = TRUE)
Run Code Online (Sandbox Code Playgroud)


Nic*_*ris 5

上个月开始日期:

format(Sys.Date() - 30, '%Y-%m-01')
Run Code Online (Sandbox Code Playgroud)

上个月结束日期:

as.Date(format(Sys.Date(), '%Y-%m-01')) - 1
Run Code Online (Sandbox Code Playgroud)