lubridate包
date_test=as.Date('2015-1-31')
date_test %m+% months(2)
[1]"2015-03-31"
具体原因不明
>as.Date('2015-5-5') %m+% months(10)
[1] "2016-03-05"
针对月底的情况:
>as.Date('2015-11-30') %m+% months(2)
[1] "2016-01-30" 并不是1月的月底
> as.Date('2015-12-31') %m+% months(1)
[1] "2016-01-31" 可以得到月底
> as.Date('2015-10-31') %m+% months(1)
[1] "2015-11-30"
> as.Date('2015-10-30') %m+% months(4)
[1] "2016-02-29"
针对以31号为月底的相加后会正确的得到月底,以30号为月底的并不能准确的到月底(相加后等于2月份的除外)
> as.Date('2015-12-31') %m+% months(2)
[1] "2016-02-29" 当超过30天时,针对相加后为2月份的情况,相加可以得到2月月底
> as.Date('2015-12-31') %m+% months(14)
[1] "2017-02-28
floor_date(as.Date('2015-8-8'),'month')
[1] "2015-08-01" 获取本月月首
ceiling_date(as.Date('2015-4-5'),'month')
[1] "2015-05-01" 获取下月月首
利用floor_date及ceiling_date取日期再减一即可