Quelqu'un aurait-il des idées sur la meilleure façon de calculer le nombre de jours qui se croisent entre deux périodes?Nombre de jours se croisant entre deux périodes
Répondre
Obtenir une nouvelle plage, définie par la plus récente des débuts et la plus ancienne des extrémités, et déterminer le nombre de jours depuis le début de l'époque pour chaque jour dans cette nouvelle plage.
La différence est le nombre de jours dans l'intersection. Accepter seulement des valeurs positives.
Modifié pour prendre en compte les plages au lieu des dates individuelles.
La question demande entre deux plages de dates et non deux dates. (Edité en réponse aux commentaires)
Donc, si vous avez 2 gammes Date (r1s, R1e), vous devez déterminer qui commence d'abord, est-t-il chevauchement, et quel est le chevauchement.
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;
}
"Supposons que T1s est toujours
Vous avez raison. Aussi (et les réponses ci-dessus) supposons qu'il y a chevauchement. Nous devons tester cela aussi. – WombatPM
Si je comprends bien votre question, vous demandez le nombre de jours qui se chevauchent deux plages de dates, telles que: Range 1 = 2010-1-1 à 2010-2-1 Range 2 = 2010-1-5 à 2010-2-5 Dans cet exemple, le nombre de jours entrecroisés serait de 28 jours.
Voici un exemple de code pour cet exemple
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));
Voici un exemple de R. Cela pourrait clarifier la réponse.
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))
vrai indiquerait qu'ils se croisent, Faux sinon. [r]
Voici une petite méthode que j'ai écrite pour le calculer.
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;
}
Grande solution simple. Fonctionne pour moi et passe tous mes tests. –
- 1. nombre de périodes (personnalisées) entre deux dates
- 2. Nombre de jours dans plusieurs périodes
- 3. Nombre de jours entre deux dates - ANSI SQL
- 4. C# Nombre de jours entre deux dates problème
- 5. Quel est le nombre de jours entre deux dates?
- 6. Différence de jours entre deux dates
- 7. Différence de jours entre deux dates Java?
- 8. SQL pour déterminer des périodes distinctes de jours d'accès séquentiels?
- 9. Obtenir la différence entre deux périodes (Unix Epoch)
- 10. Calculez le nombre de jours de la semaine entre deux dates en C#
- 11. Regrouper les périodes de date (par nombre de jours) mais exclure les fins de semaine?
- 12. Comment obtenir Nombre de mois et Jours De deux dates
- 13. Comment calculer combien de jours ouvrables se situent entre deux dates?
- 14. Pourquoi la différence entre deux dates ne me donne pas un nombre entier de jours
- 15. Comment puis-je obtenir le nombre de jours entre deux dates dans Oracle 11g?
- 16. Dessin de polygones redimensionnables (ne se croisant pas)
- 17. Nombre d'années entre deux dates
- 18. Comment obtenir la différence entre deux jours dans l'iPhone
- 19. Calculer le nombre de jours entre les événements - Android
- 20. SDK iPhone - Nombre de jours entre le jour et aujourd'hui
- 21. Problème de trouver la différence en jours entre deux dates
- 22. comment moins deux périodes de temps
- 23. Nombre de flottants entre deux flotteurs
- 24. Comment puis-je déterminer combien de mois, de semaines et de jours se sont écoulés entre deux dates?
- 25. Démontrer que les segments formés par deux segments internes à un cercle se croisant sont multipliés
- 26. Comment compter les jours entre deux dates en PHP?
- 27. Si j'ai deux périodes, comment puis-je savoir si elles se chevauchent?
- 28. comment créer des listes liées se croisant en C#?
- 29. Comment compter le nombre de jours?
- 30. Nombre d'années, mois et jours
Merci à tous pour vos commentaires ... Excellentes suggestions! Je n'avais pas réalisé que c'était si simple. – BoredOfBinary