我正在尝试给一个已有的日期加一个月。但目前为止,直接加并不可能。以下是我尝试过的方法。
d <- as.Date("2004-01-31")
d + 60
# [1] "2004-03-31"
由于这个月份不会重叠,所以添加是没有帮助的。
seq(as.Date("2004-01-31"), by = "month", length = 2)
# [1] "2004-01-31" "2004-03-02"
上述方法可能有效,但并不是直接明了的。此外,它还会给日期添加30天或其他一些问题,如下所示。
seq(as.Date("2004-01-31"), by = "month", length = 10)
# [1] "2004-01-31" "2004-03-02" "2004-03-31" "2004-05-01" "2004-05-31" "2004-07-01" "2004-07-31" "2004-08-31" "2004-10-01" "2004-10-31"
在上述示例中,前两个日期的月份未改变。
此外,以下方法对于月份也失败了,但对年份却成功了。d <- as.POSIXlt(as.Date("2010-01-01"))
d$year <- d$year +1
d
# [1] "2011-01-01 UTC"
d <- as.POSIXlt(as.Date("2010-01-01"))
d$month <- d$month +1
d
Error in
format.POSIXlt(x, usetz = TRUE)
: invalid 'x' argument
怎样才是正确的方法?
ymd("2011-02-20") %m+% months(1)
似乎可以正常工作。 - lostymd("2019-01-31") %m+% months(1)
将得到2019-02-28
。如果该年是闰年,则该日将为29日。这是正确的行为。如果您想要 +30 天,只需使用正常的+
运算符添加 30 天即可。 - Felipe Gerard