Algo que es bien recurrente y hasta “básico” en muchas de nuestras aplicaciones es el cálculo de la edad para una fecha dada. Tomando esto en cuenta y aprovechando a nuestros amigos los métodos de extensión me cree un par de métodos sencillos que pueden más de algún día salvarnos un par de minutos.
using System;
using Xunit;
using Xunit.Extensions;
namespace Rioshu.Educa.Facts
{
public class DateTimeExtensionFacts
{
[Fact]
public void Can_calculate_age_with_simple_dates()
{
var past_date = DateTime.Now.AddYears(-10);
Assert.Equal(10, past_date.Age());
}
[Fact, FreezeClock(2009, 01, 01)]
public void Can_calculate_age_with_not_so_simple_dates()
{
var past_date = new DateTime(2002, 02, 13);
Assert.Equal(7, past_date.Age());
}
[Fact]
public void Can_calculate_age_with_a_base_date()
{
var from_date = new DateTime(2010, 01, 01);
var past_date = new DateTime(2002, 02, 13);
Assert.Equal(8, past_date.Age(from_date));
}
}
}
Y aquí la implementación del helper
public static class DateTimeExtensions
{
public static int Age(this DateTime date)
{
return Age(date, DateTime.Now);
}
public static int Age(this DateTime date, DateTime from_date)
{
if (from_date.Month <= date.Month && from_date.Day < date.Day) {
return from_date.Year - date.Year - 1;
}
return from_date.Year - date.Year;
}
}
Como siempre acepto sugerencias y comentarios
Hasta la próxima!