A eso iba, cuando pasas al detalle de horas/minutos/segundos, entonces pasas a tener problemas a partir de los meses, porque un mes son 30,4368499 días según google
Había implementado un método pero tiene el mismo problema a partir del mes, por el tema de redondeo y demás (es el mismo método que se utiliza por ejemplo para dividir un importe en billetes).
public string DateDifference(DateTime dateStart, DateTime dateEnd)
{
Dictionary
<string,
double> dateParts
= new Dictionary
<string,
double>(); dateParts.Add("Years", 31556925.97632);
dateParts.Add("Months", 2629743.83136);
dateParts.Add("Weeks", 604800);
dateParts.Add("Days", 86400);
dateParts.Add("Hours", 3600);
dateParts.Add("Minutes", 60);
dateParts.Add("Seconds", 1);
TimeSpan time = dateEnd - dateStart;
double totalSeconds = time.TotalSeconds;
List
<string> result
= new List
<string>(); int diff;
foreach (KeyValuePair<string, double> part in dateParts)
{
diff = (int)(totalSeconds / part.Value);
totalSeconds -= (diff * part.Value);
result.Add(string.Format("{0} {1}", diff, part.Key));
}
return string.Join(", ", result.ToArray());
}
Creo que se podría implementar el método, pero ya no es tan "sencillo"
Saludos