¿Alguien podría tener alguna idea de cómo calcular mejor la cantidad de días que se cruzan entre dos intervalos de fechas?Recuento de días que se cruzan entre dos intervalos de fechas
Respuesta
Obtenga un nuevo rango, definido por el último de los comienzos y el anterior de los extremos, y determine el número de días desde el comienzo de la época para cada día en ese nuevo rango.
La diferencia es el número de días en la intersección. Acepta solo valores positivos
Editado para tener en cuenta los rangos en lugar de las fechas individuales.
La pregunta se realiza entre dos intervalos de fechas y no dos fechas. (editada en respuesta a los comentarios)
Así que si usted tiene 2 intervalos de fecha (R1S, R1e), es necesario determinar que se inicia en primer lugar, ¿Hay superponen, y lo que es la superposición.
double overlap(DateTime r1s, DateTime r1e, DateTime r2s, DateTime r1e){
DateTime t1s,t1e,t2s,t2e;
if (rs1<rs2) //Determine which range starts first
{
t1s = r1s;
t1e = r1e;
t2s = r2s;
t2e = r2e;
}
else
}
t1s = r2s;
t1e = r2e;
t2s = r1s;
t2e = r1e;
}
if (t1e<t2s) //No Overlap
{
return -1;
}
if (t1e<t2e) //Partial Overlap
}
TimeSpan diff = new TimeSpan(t1e.Ticks - t2s.Ticks);
{
else //Range 2 totally withing Range 1
}
TimeSpan diff = new TimeSpan(t2e.Ticks - t2s.Ticks);
{
double daysDiff = diff.TotalDays;
return daysDiff;
}
"Supongamos que T1s siempre es
Tienes razón. También I (y las respuestas anteriores) están asumiendo que hay superposición. Necesitamos probar eso también. – WombatPM
Si entiendo su pregunta, que está pidiendo el número de días que se superponen dos intervalos de tiempo, tales como: Rango 1 = 2010-1-1 a 02/01/2010 Rango 2 = 2010-1-5 a 2010-2-5 en este ejemplo, el número de días que se cruzan sería de 28 días.
Aquí es un ejemplo de código para ese ejemplo
DateTime rs1 = new DateTime(2010, 1, 1);
DateTime re1 = new DateTime(2010, 2, 1);
DateTime rs2 = new DateTime(2010, 1, 5);
DateTime re2 = new DateTime(2010, 2, 5);
TimeSpan d = new TimeSpan(Math.Max(Math.Min(re1.Ticks, re2.Ticks) - Math.Max(rs1.Ticks, rs2.Ticks) + TimeSpan.TicksPerDay, 0));
Este es un ejemplo de R. Eso podría aclarar la respuesta.
c_st = as.POSIXct("1996-10-14")
c_ed = as.POSIXct("1996-10-19")
d_st = as.POSIXct("1996-10-17")
d_ed = as.POSIXct("1999-10-22")
max(range(c_st,c_ed))-min(range(d_st,d_ed)) >= 0 & min(range(c_st,c_ed)) < max(range(d_st,d_ed))
Verdadero indicaría que se cruzan, False en caso contrario. [r]
Aquí hay un pequeño método que escribí para calcular esto.
private static int inclusiveDays(DateTime s1, DateTime e1, DateTime s2, DateTime e2)
{
// If they don't intersect return 0.
if (!(s1 <= e2 && e1 >= s2))
{
return 0;
}
// Take the highest start date and the lowest end date.
DateTime start = s1 > s2 ? s1 : s2;
DateTime end = e1 > e2 ? e2 : e1;
// Add one to the time range since its inclusive.
return (int)(end - start).TotalDays + 1;
}
Solución genial y directa. Funciona para mí y pasa todas mis pruebas. –
- 1. Calcular los intervalos de fechas que faltan y los intervalos de fechas que se solapan entre dos fechas
- 2. Diferencia de días entre dos fechas
- 3. Contabilizar días de trabajo entre dos fechas
- 4. Número de días entre dos fechas
- 5. bucle Javascript entre intervalos de fechas
- 6. Días, horas, minutos, segundos entre dos fechas
- 7. Días entre dos fechas en Python
- 8. Java, calcular el número de días entre dos fechas
- 9. ¿Cómo encontrar el número de días entre dos fechas
- 10. iPhone - obtenga el número de días entre dos fechas
- 11. Resumir días por mes en base a intervalos de fechas
- 12. ¿Cálculo de cuántos días hay entre dos fechas en DB2?
- 13. Número de días entre dos fechas en Joda-Time
- 14. Número de días entre dos fechas: ANSI SQL
- 15. fechas consistentemente dos días de descanso
- 16. ¿Cómo contar días entre dos fechas en PHP?
- 17. ¿Encontrar diferencia de días entre dos fechas (excluyendo días de fin de semana) en Python?
- 18. ¿Cómo se cruzan dos polígonos?
- 19. Calcular el número de días hábiles entre dos días
- 20. Matriz de fechas entre dos fechas
- 21. ¿Cómo podemos añadir dos intervalos de fechas en PHP
- 22. Fusionar intervalos de fechas superpuestas
- 23. Generar intervalos de fechas en JodaTime
- 24. ¿Cómo saber si dos CGRect se cruzan?
- 25. se cruzan dos listas con diferentes objetos
- 26. ¿Cómo se cruzan dos listas en OCaml?
- 27. Problema al calcular intervalos de fechas superpuestas
- 28. ¿Cómo puedo calcular el número de años entre dos fechas?
- 29. Diferencia entre dos fechas en Python
- 30. Obtener el número de días entre dos fechas de NSDate en una zona horaria particular
Gracias a todos por sus comentarios ... ¡Excelentes sugerencias! No me di cuenta de que era tan simple. – BoredOfBinary