Función para calcular una edad (Uso de DateTime) | Powershell

En esta oportunidad, les traigo una función para obtener una edad en base a una fecha que ingresemos. En sí, la utilidad de la misma es mínima y muy simple, pero la idea es introducirnos en el uso de la estructura DateTime que nos provee el .NET Framework y es posible utilizar desde Powershell.

Función

Function CalcularEdad ([DateTime]$FechaNacimiento = $null) {

[DateTime]$DiaActual = Get-Date
[Int] $Edad = $DiaActual.Year - $FechaNacimiento.Year

if ($FechaNacimiento.DayOfYear -gt $DiaActual.DayOfYear)

{

$Edad-=1


}


Return $Edad
}

Como se puede observar, lo primero que hacemos es indicarle a la función que debe recibir un parámetro del tipo DateTime, el cual será la fecha de nacimiento y la inicializamos en $null.

Function CalcularEdad ([DateTime]$FechaNacimiento = $null) { 

}

Luego, debemos obtener la fecha actual, para eso Powershell brinda un cmdLet llamado “Get-Date

[DateTime]$DiaActual = Get-Date

A sí mismo para obtener la edad, utilizamos las variables $FechaNacimieto y $DiaActual, que son del tipo DateTime, para realizar una resta pero solamente del año, el cual se puede obtener mediante la propiedad Year que devuelve un numero entero signado de 32 bits.

[Int] $Edad = $DiaActual.Year - $FechaNacimiento.Year

Hasta este momento, ya podemos saber la edad de por ejemplo una persona, basándonos en la fecha de nacimiento, pero nos encontramos con un problema en nuestra función.

¿Qué pasa si el día y mes de la fecha que ingresamos es futura? Es decir, supongamos que hoy es 20/08/2015 y la fecha que ingresamos de cumpleaños de una persona es 25/09/1990, como se puede observar dicha persona aún no ha cumplido años.

Es por eso que debemos hacer una validación previa, y las variables del tipo DateTime nos ayudarán a hacerlo más simple:

if ($FechaNacimiento.DayOfYear -gt $DiaActual.DayOfYear)

{

$Edad-=1


}

Para ello comprobamos mediante un IF si la fecha de nacimiento es mayor al día actual, y es aquí donde entra en acción la propiedad DayOfYear, la cual devuelve el día del año expresado como un valor entero entre 1 y 366, ya que tiene en cuenta años bisiestos (Calendario gregoriano).

De esta forma, si la fecha de nacimiento es mayor a la fecha actual, se le resta a la variable $Edad un 1, indicando que la persona aún no cumplió años.

Ejemplo de uso:

1

2

Más información sobre la estructura DateTime aquí.

¡Espero que les sea útil!

Advertisements

One thought on “Función para calcular una edad (Uso de DateTime) | Powershell

Add yours

  1. No funciona bien en estos casos

    fecha nacimiento 1/03/1995
    fecha actual 29/02/2016
    Tiene 20 años ya que todavía no ha sido su cumpleaños y la función devuelve 21.

    fecha nacimiento 1/03/1994
    fecha actual 1/03/2015
    Tiene 21 años porque les acaba de cumplir y la función devuelve 21 -1, es decir 20.
    Como este caso, se repite el error cuando el año de nacimiento es bisiesto y las fechas coinciden.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

Up ↑

%d bloggers like this: