Foro de debate

Trabajar con fechas

Re: Trabajar con fechas

de Manuel Muñoz Márquez -
Número de respuestas: 0

Buenas:

Creo que el código siguiente hace lo que quieres:

fechainicio <- as.Date(c('2019-01-08', '2018-12-30', '2018-12-30', '2019-3-1', '2018-12-1'))
fechafin <- as.Date(c('2019-01-18', '2019-01-18', '2019-02-15', '2019-3-15', '2018-12-15'))
## Calculamos el primer día después del 1 de enero
inicio <- pmax(fechainicio, as.Date(ISOdate(2019, 1, 1)))
inicio
## Calculamos el último día hasta el 31 de enero
final <- pmin(fechafin, as.Date(ISOdate(2019, 1, 31)))
final
## Número de días incluido el primero y el último
dias <- final - inicio + 1
dias
## Si el periodo es disjunto con enero el resultado es negativo y debería ser 0
dias[dias < 0] <- 0
dias
## Convertir a númerico
as.numeric(dias)

La salida es:

> fechainicio <- as.Date(c('2019-01-08', '2018-12-30', '2018-12-30', '2019-3-1', '2018-12-1'))
> fechafin <- as.Date(c('2019-01-18', '2019-01-18', '2019-02-15', '2019-3-15', '2018-12-15'))
> inicio <- pmax(fechainicio, as.Date(ISOdate(2019, 1, 1)))
> inicio
[1] "2019-01-08" "2019-01-01" "2019-01-01" "2019-03-01" "2019-01-01"
> final <- pmin(fechafin, as.Date(ISOdate(2019, 1, 31)))
> final
[1] "2019-01-18" "2019-01-18" "2019-01-31" "2019-01-31" "2018-12-15"
> dias <- final - inicio + 1
> dias
Time differences in days
[1]  11  18  31 -28 -16
> dias[dias < 0] <- 0
> dias
Time differences in days
[1] 11 18 31  0  0
> as.numeric(dias)
[1] 11 18 31  0  0

Un saludo