如何找到下个月的第一天和最后一天?

时间:2019-01-25 09:59:47

标签: r date

如果我有给定的日期,如何找到下个月的第一天和最后几天?

例如,

today <- as.Date("2009-04-04")

我想找到

# first date in next month
"2009-05-01"  

# last date in next month
"2009-05-31"

3 个答案:

答案 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