Add/subtract 6 months (bond time) in R using lubridate

前端 未结 2 1339
野的像风
野的像风 2020-12-05 00:43

I am looking to add and subtract six months reliably with lubridate.

For example, adding six months to 12/31/2014 should result in 6

2条回答
  •  萌比男神i
    2020-12-05 01:08

    I just coded this out quickly, but I think it should work. I'm not sure if it's the most elegant solution, however.

    # up = 1, down = -1
    six.mo.mover<-function(date,up.or.down) {
      last.day <- month(date) != month(as.Date(date)+1) 
      if(last.day) {
        adj.date <- as.Date(date) - day(as.Date(date)-1) + up.or.down*months(6)
        adj.mo <- month(adj.date)
        if (adj.mo == 2) {
          dy <- 28 + leap_year(year(adj.date))
        }
        else {
          dy <- 31-(adj.mo-1)%%7%%2
        }
        adj.date + days(dy-1)
      } 
      else {
        as.Date(date)+up.or.down*months(6)
      }
    }
    

    NB: not debugged, so check it yourself and let me know.

提交回复
热议问题