Después de tanto trabajar hemos encontrado la respuesta de esta dificultad que algunos usuarios de nuestra web presentan. Si deseas aportar algún dato no dejes de aportar tu comentario.
Solución:
los lubridate
función %m+%
puede ser útil aquí:
Sumar y restar meses a una fecha sin exceder el último día del nuevo mes
as.Date("2014-12-31") %m+% months(6)
# [1] "2015-06-30"
Para manejar también el segundo caso, deberá redondear al mes más cercano usando ceiling_date
y resta un día usando days
.
ceiling_date(as.Date("2014-02-28") %m+% months(6), unit = "month") - days(1)
# [1] "2014-08-31"
Acabo de codificar esto rápidamente, pero creo que debería funcionar. Sin embargo, no estoy seguro de si es la solución más elegante.
# 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: no depurado, así que compruébelo usted mismo y hágamelo saber.
Ten en cuenta mostrar esta sección si te valió la pena.
¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)