从 2 月开始的日期增加 6 个月
Add 6 months to a date starting february
我正在尝试使用 lubridate 库从二月减去 3 个月到一个日期,但是,它总是给我 28 的日期。我知道很多人都问过这个问题,但我已经尝试了很多东西,但仍然是同样的错误。循环一天是一种选择。但是,我一直在寻找高效的东西
我的代码是这样的:
其中 test_end = "2019-02-28"
和 lastnmonth = 3
as.Date(test_end) %m-% months(lastnmonth)
我总是得到“2018-11-28”而不是“2018-11-30”的输出
lubridate::ymd("2019-02-28") - lubridate::period(3, "months")
用于计算 mont-end 的附加代码
lubridate::ceiling_date(lubridate::ymd("2019-02-28") - lubridate::period(3, "months"), "months") - lubridate::ddays(1)
你想要这个月的最后一个 - 所以你可以使用 next 是第一个的技巧,将那个移动一个月数 - 然后减去一天。
一行基本R:
R> seq(as.Date("2019-02-28") + 1, length=4, by="-1 month") - 1
[1] "2019-02-28" "2019-01-31" "2018-12-31" "2018-11-30"
R>
我们加一天,然后用四个月(包括当前)的序列向后,取出一天是上个月的最后一天。
如果您只想要一个,只需添加 tail(..., 1)
:
R> tail(seq(as.Date("2019-02-28") + 1, length=4, by="-1 month") - 1, 1)
[1] "2018-11-30"
R>
使用 Dirk 的策略,我们可以制定一个函数来处理此类操作:
start_date <- lubridate::ymd("2019-02-28")
mths_to_subtract <- 3
deduct_mth <- function(date_object = start_date,
mths_to_deduct = mths_to_subtract){
days_to_ceiling_date <- lubridate::ceiling_date(date_object, "months") - date_object
date_object + days_to_ceiling_date - lubridate::period(mths_to_deduct, "months") - days_to_ceiling_date
}
给出以下答案:
> deduct_mth(ymd("2019-02-28"), 3)
[1] "2018-11-30"
> deduct_mth(ymd("2000-02-29"), 3)
[1] "1999-11-30"
我正在尝试使用 lubridate 库从二月减去 3 个月到一个日期,但是,它总是给我 28 的日期。我知道很多人都问过这个问题,但我已经尝试了很多东西,但仍然是同样的错误。循环一天是一种选择。但是,我一直在寻找高效的东西
我的代码是这样的:
其中 test_end = "2019-02-28" 和 lastnmonth = 3
as.Date(test_end) %m-% months(lastnmonth)
我总是得到“2018-11-28”而不是“2018-11-30”的输出
lubridate::ymd("2019-02-28") - lubridate::period(3, "months")
用于计算 mont-end 的附加代码
lubridate::ceiling_date(lubridate::ymd("2019-02-28") - lubridate::period(3, "months"), "months") - lubridate::ddays(1)
你想要这个月的最后一个 - 所以你可以使用 next 是第一个的技巧,将那个移动一个月数 - 然后减去一天。
一行基本R:
R> seq(as.Date("2019-02-28") + 1, length=4, by="-1 month") - 1
[1] "2019-02-28" "2019-01-31" "2018-12-31" "2018-11-30"
R>
我们加一天,然后用四个月(包括当前)的序列向后,取出一天是上个月的最后一天。
如果您只想要一个,只需添加 tail(..., 1)
:
R> tail(seq(as.Date("2019-02-28") + 1, length=4, by="-1 month") - 1, 1)
[1] "2018-11-30"
R>
使用 Dirk 的策略,我们可以制定一个函数来处理此类操作:
start_date <- lubridate::ymd("2019-02-28")
mths_to_subtract <- 3
deduct_mth <- function(date_object = start_date,
mths_to_deduct = mths_to_subtract){
days_to_ceiling_date <- lubridate::ceiling_date(date_object, "months") - date_object
date_object + days_to_ceiling_date - lubridate::period(mths_to_deduct, "months") - days_to_ceiling_date
}
给出以下答案:
> deduct_mth(ymd("2019-02-28"), 3)
[1] "2018-11-30"
> deduct_mth(ymd("2000-02-29"), 3)
[1] "1999-11-30"