是否有任何简单的方法可以从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)
上个月开始日期:
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)