将日期持续数月持续数月

假设我们希望将给定日期移动一个月。我们可以定义以下函数,它使用 mondate 包:

moveNumOfMonths <- function(date, num) {
    as.Date(mondate(date) + num)
}

如果日期指的是该月的最后一天,它会一致地移动日期的月份部分并调整日期。

例如:

回来一个月:

> moveNumOfMonths("2017-10-30",-1)
[1] "2017-09-30"

回来两个月:

> moveNumOfMonths("2017-10-30",-2)
[1] "2017-08-30"

前进两个月:

> moveNumOfMonths("2017-02-28", 2)
[1] "2017-04-30"

它从 2 月的最后一天开始两个月,因此是 4 月的最后一天。

让我们来看看当它是一个月的最后一天时它如何用于向后和向前操作:

> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"
> moveNumOfMonths("2017-01-31", -2)
[1] "2016-11-30"

因为 11 月有 30 天,我们在向后操作中获得相同的日期,但是:

> moveNumOfMonths("2017-01-30", -2)
[1] "2016-11-30"
> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"

因为 1 月有 31 天,所以从 11 月的最后一天开始移动两个月将到 1 月的最后一天。