Ver Mensaje Individual
  #10 (permalink)  
Antiguo 26/07/2013, 16:39
Avatar de Nemutagk
Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: mostrar rango de edades con php

Lo peor que se puede hacer es alterar registros en una base de datos ya creada, al menos si no tienes 100% control sobre quien accesa a dicha información, imagina que esos datos son consultados por otra aplicación o persona, convertir la fecha a unix podría corromper dicho programa o dificultar/anular la lectura por alguna otra persona....

Para tu problema puedes usar la clase DateTime (solo disponible a partir de PHP5) para saber la edad de manera sencilla, otra forma es usar SQL directamente para saber la edad (que en rendimiento puede ser mejor) usando las funciones YEAR() y CURDATE(), para el tema de los rangos solo es cuestión de usar if para saber en que rango esta, te dejo un ejemplo con datetime, pero que es fácil traducir usando SQL para saber la edad...

Código PHP:
Ver original
  1. <?php
  2.  
  3. //función genérica para generar las fechas de manera aleatoria...
  4. function genFecha() {
  5.     $mes = rand(1,12);
  6.     switch($mes) {
  7.         case 1:
  8.         case 3:
  9.         case 5:
  10.         case 7:
  11.         case 8:
  12.         case 10:
  13.         case 12:
  14.             $dia = rand(1,31);
  15.             break;
  16.         case 4:
  17.         case 6:
  18.         case 9:
  19.             $dia = rand(1,30);
  20.             break;
  21.         case 2:
  22.             $dia = rand(1,28);
  23.             break;
  24.     }
  25.     $anio = rand(1950,2000);
  26.  
  27.     if (checkdate($mes, $dia, $anio)) {
  28.         return $anio.'/'.$mes.'/'.$dia;
  29.     }else {
  30.         return genFecha();
  31.     }
  32. }
  33.  
  34. $rangos = array();
  35. $hoy = new DateTime('now');
  36.  
  37. for($i=0; $i<50; $i++) {
  38.     //solo fijate en que formato se entregan (YYYY/MM/DD)
  39.     $fecha = new DateTime(genFecha());
  40.  
  41.     $intervalo = $fecha->diff($hoy);
  42.     $anios = $intervalo->format('%Y');
  43.  
  44.     if ($anios <= 24) {
  45.         $rangos[$anios] += 1;
  46.     }
  47.  
  48.     if ($anios >= 25 && $anios <= 29) {
  49.         $rangos['25a29'] += 1;
  50.     }
  51.  
  52.     if ($anios >= 30 && $anios <= 34) {
  53.         $rangos['30a34'] += 1;
  54.     }
  55.  
  56.     if ($anios >= 35 && $anios <= 39) {
  57.         $rangos['35a39'] += 1;
  58.     }
  59.  
  60.     if ($anios >= 40 && $anios <= 44) {
  61.         $rangos['40a44'] += 1;
  62.     }
  63.  
  64.     if ($anios >= 7 && $anios <= 49) {
  65.         $rangos['7a49'] += 1;
  66.     }
  67. }
  68.  
  69. echo '<pre>';
  70. print_r($rangos);
  71. echo '</pre>';
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 26/07/2013 a las 16:46