lubridate-使用%m+;%生成的月末序列不正确

lubridate-使用%m+;%生成的月末序列不正确,r,lubridate,R,Lubridate,我在使用lubridate时遇到了一些奇怪的行为 dtStart<-ymd(20000430) n<-24 dtStart %m+% months(0:n) 感谢您对使用lubridate解决此问题的任何建议?(不是base R)您实际上并不是在问最后一天,而是“在不超过新月份最后一天的情况下,对一个日期加上和减去月份”,因此函数的运行完全符合预期 无论如何,您可以“欺骗”它一点,以获得您想要的,方法是从一个月的最大天数(31)开始给它一个开始日期,并相应地修改呼叫: dtStar

我在使用lubridate时遇到了一些奇怪的行为

dtStart<-ymd(20000430)
n<-24
dtStart %m+% months(0:n)

感谢您对使用lubridate解决此问题的任何建议?(不是base R)

您实际上并不是在问最后一天,而是“在不超过新月份最后一天的情况下,对一个日期加上和减去月份”,因此函数的运行完全符合预期

无论如何,您可以“欺骗”它一点,以获得您想要的,方法是从一个月的最大天数(31)开始给它一个开始日期,并相应地修改呼叫:

dtStart<-ymd(20000331)
dtStart %m+% months(1:(n+1))
# [1] "2000-04-30 UTC" "2000-05-31 UTC" "2000-06-30 UTC" "2000-07-31 UTC" "2000-08-31 UTC" "2000-09-30 UTC" "2000-10-31 UTC"
# [8] "2000-11-30 UTC" "2000-12-31 UTC" "2001-01-31 UTC" "2001-02-28 UTC" "2001-03-31 UTC" "2001-04-30 UTC" "2001-05-31 UTC"
# [15] "2001-06-30 UTC" "2001-07-31 UTC" "2001-08-31 UTC" "2001-09-30 UTC" "2001-10-31 UTC" "2001-11-30 UTC" "2001-12-31 UTC"
# [22] "2002-01-31 UTC" "2002-02-28 UTC" "2002-03-31 UTC" "2002-04-30 UTC"
dtStart回答:

ceiling_date(dtStart %m+% months(0:n),unit = "month")-days(1)

此代码将上限日期设置为下一个月,然后减去一天以查找该月的最后一个日期。

问题的可能重复项被指定为使用lubridate,可能的重复项使用base R。请解释此操作的原因,以便下一个用户了解此问题
ceiling_date(dtStart %m+% months(0:n),unit = "month")-days(1)