Foro de debate

Trabajar con fechas

Trabajar con fechas

de eva rota -
Número de respuestas: 1

Buenos días,

Tengo un problema con las fechas de una base de datos donde hay una fecha de inicio y otra de fin sobre un consumo de agua, pero necesito saber si por ejemplo el intervalo de fechas es: 

FECHA INICIO: 2019-01-08

FECHA FIN: 2019-03-08

Saber cuántos días pertenecen a enero en este caso serian 23, cuáles a febrero que sería 29 y cuáles a marzo que son 8. 

He conseguido crear dos intervalos con el paquete lubridate, uno donde x <- interval(FECHA INICIO, FECHA FIN), y otro intervalo donde y <- interval(inicioenero - finalenero) "teniendo en cuenta que el intervalo es entre el 01/01/2019 y 31/01/2019" y entonces comparar los dos intervalos y ver si se solapan o no con el comando: int_overlaps(x,y)

El resultado que da te dice 'TRUE' si el intervalo de fechas de mi base de datos se solapa con el intervalo del mes de enero y 'FALSE' si no se solapa. 

Sólo me faltaria saber qué días són los que pertencen a enero, en mi caso de ejemplo serian 23. 

Alguien sabe algun comando que me de este resultado? Sería de mucha ayuda,  Muchas gracias!!!

Un saludo.

 Fdo: Eva Roa
 Blogger como hacer un curriculum

En respuesta a eva rota

Re: Trabajar con fechas

de Manuel Muñoz Márquez -

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