如果我有给定的日期,如何找到下个月的第一天和最后几天?
例如,
today <- as.Date("2009-04-04")
我想找到
# first date in next month
"2009-05-01"
# last date in next month
"2009-05-31"
答案 0 :(得分:2)
您可以使用基数R:
today <- as.Date("2009-04-04")
first <- function(x) {
x <- as.POSIXlt(x)
x$mon[] <- x$mon + 1
x$mday[] <- 1
x$isdst[] <- -1L
as.Date(x)
}
first(today)
#[1] "2009-05-01"
first(first(today)) - 1
#[1] "2009-05-31"
答案 1 :(得分:1)
lubridate
为此目的提供了一些有用的工具。
library(lubridate)
today <- ymd("2009-04-12")
# First day of next month
first <- ceiling_date(today, unit = "month")
# Last day of next month
last <- ceiling_date(first, unit= "month") -1
first
#"2009-05-01"
last
#"2009-05-31"
答案 2 :(得分:0)
以下是一些解决方案。我们使用问题中的today
进行测试。在这两种情况下,输入都可能是Date
类向量。
1)基数R 定义函数fom
以给出其Date
的月份的第一天
论点。使用它,我们可以获得下个月的第一天和最后一个月的日期,如下所示。我们使用的事实是,每个月的第一天之后的31天和62天必然是下个月的日期以及下个月的一个月。
fom <- function(x) as.Date(cut(x, "month"))
fom(fom(today) + 31)
## [1] "2009-05-01"
fom(fom(today) + 62) - 1
## [1] "2009-05-31"
2)yearmon yearmon
类对象内部表示年和月为年份,一月为0,二月为1/12,三月为2/12,依此类推。使用as.Date.yearmon
的{{1}}参数可以指定输出月份的比例。缺省值为frac
,结果是每月的第一天,而frac = 0
的意思是每月的月底。
frac = 1