1

Tengo un pequeño problema que no logro resolver aún, consiste en obtener la edad de una persona a través de que a esta se le registra su curp, creo que para ello ya resolví el primer paso, que es separar la fecha de nacimiento, como ejemplo: ROMA920908HG...

Lo cual nos daría un formato así: AA/MM/DD, eso ya lo logré mediante un procedimiento y con la función Substr, el resultado lo concateno y guardo en una variable, ahora el detalle es que no sé cómo lograr realizar el cálculo de la edad exacta.

Lo que se me ocurre es restarle la fecha obtenida a la fecha actual (&today), pero considero erróneo restar tipos de dato date, si alguien tiene alguna sugerencia o aporte le agradecería mucho.

Joacer
  • 5,755
  • 9
  • 29
  • 54
Alberto
  • 13
  • 3

2 Answers2

2

En GeneXus puedes usar la función Age, que hace exactamente lo que quieres.

El código quedaría así:

&edad = Age(&fecha)

Para convertir del string a una fecha, suponiendo que tiene el formato AAMMDD, podrías hacer algo así:

&str = ... // el string a convertir
&anio = int( substr(&str, 1, 2) )
&mes = int( substr(&str, 3, 2) )
&dia = int( substr(&str, 5, 2) )
&fecha = ymdtod(&anio, &mes, &dia)
Marcos Crispino
  • 3,435
  • 12
  • 25
  • 1
    Muchas gracias Marcos, me sirvió mucho, solo que yo en vez de int convertí a numeric, y eso fue posible con la función val(), puesto que la función YMtoD recibe tipo de dato numeric... y quedó así: &anio = val(Substr(&ElementoCURP.ToString(),5,2)) &dia = val(Substr(&ElementoCURP.ToString(),9,2)) &mes = val(Substr(&ElementoCURP.ToString(),7,2)) &fecha = YMDtoD(&anio, &mes, &dia) – Alberto Jan 26 '17 at 07:19
  • Una CURP de México siempre lleva el formato `YYMMDD` desde el 5to caracter en adelante. Más info sobre eso en: [Cómo validar una CURP de México](https://es.stackoverflow.com/q/31039/127) – Mariano Feb 18 '18 at 08:04
0

Sacar la fecha de la CURP podría darte problemas con registros recientes. Yo usé este código en javascript para obtener los años de una persona a través de la fecha de nacimiento de la CURP:

var curp = '020308'; //Fecha de nacimiento CURP AAMMDD
var currentYearCentury = parseInt(new Date().getFullYear().toString().substr(0,2) + '00');
var lastYearCentury = (currentYearCentury - 100);
var yearCURP = parseInt(curp.substr(0, 2));
var monthCURP = parseInt(curp.substr(2, 2)) - 1; //Enero inicia en 0
var dayCURP = parseInt(curp.substr(4, 2));
var birthdate = null;

if (monthCURP >= 0 && monthCURP <= 11 && dayCURP >= 1 && dayCURP <= 31) {
    if ((currentYearCentury + yearCURP) > new Date().getFullYear()) {
        birthdate = new Date((lastYearCentury + yearCURP), monthCURP, dayCURP, 0, 0, 0, 0);
    } else {
        birthdate = new Date((currentYearCentury + yearCURP), monthCURP, dayCURP, 0, 0, 0, 0);
    }
}

if (birthdate != null) {
    var yearsDifference = (new Date().getTime() - birthdate.getTime()) / 1000;
    yearsDifference /= (60 * 60 * 24);
    Math.abs(Math.round(yearsDifference/365.25));
}
rsoria03
  • 1
  • 1