將日期持續數月持續數月

假設我們希望將給定日期移動一個月。我們可以定義以下函式,它使用 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 月的最後一天。