Estoy buscando una manera de calcular la edad de una persona, dada su fecha de nacimiento en el formato dd / mm / aaaa.
Estaba usando la siguiente función que funcionó bien durante varios meses hasta que algún tipo de falla causó que el ciclo while nunca terminara y detuviera todo el sitio. Dado que hay casi 100,000 DOB que pasan por esta función varias veces al día, es difícil precisar qué estaba causando esto.
¿Alguien tiene una forma más confiable de calcular la edad?
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));
$tdate = time();
$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
++$age;
}
return $age;
EDITAR: esta función parece funcionar bien algunas veces, pero devuelve "40" para un DOB del 14/09/1986
return floor((time() - strtotime($birthdayDate))/31556926);
mktime()
. parece que PHP calculó malstrtotime()
con ese formato.strtotime
entiende perfectamente los formatos de fecha, no necesita preocuparse:Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
php.net/manual/en/function.strtotime.phpA partir de PHP 5.3.0, puede usar el útil
DateTime::createFromFormat
para asegurarse de que su fecha no se confunda con elm/d/Y
formato y laDateInterval
clase (víaDateTime::diff
) para obtener el número de años entre ahora y la fecha objetivo.fuente
fuente
Yo uso Fecha / Hora para esto:
fuente
Método simple para calcular Age desde dob:
31556926
es la cantidad de segundos en un año.fuente
$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
// Calculadora de edad
fuente
Creo que esto funciona y es simple.
Resta de 1970 porque strtotime calcula el tiempo desde 1970-01-01 ( http://php.net/manual/en/function.strtotime.php )
Resultados:
fuente
Si desea calcular la edad de uso del dob, también puede usar esta función. Utiliza el objeto DateTime.
fuente
Pensé en lanzar esto aquí ya que esta parece ser la forma más popular de esta pregunta.
Realicé una comparación de 100 años en 3 de los tipos más populares de funciones de edad que pude encontrar para PHP y publiqué mis resultados (así como las funciones) en mi blog .
Como puede ver allí , las 3 funciones funcionan bien con solo una ligera diferencia en la segunda función. Mi sugerencia basada en mis resultados es usar la tercera función a menos que desee hacer algo específico en el cumpleaños de una persona, en cuyo caso la primera función proporciona una manera simple de hacer exactamente eso.
Mis sugerencias después de mi revisión de 100 años:
Si desea algo más alargado para que pueda incluir ocasiones como cumpleaños y tal:
Pero si simplemente quieres saber la edad y nada más, entonces:
Ver BLOG
Una nota clave sobre el
strtotime
método:fuente
Puede usar la
Carbon
biblioteca , que es una extensión de API para DateTime.Usted puede:
o:
fuente
age
, que está haciendo adiffInYears
. Por lo tanto se puede escribir:(new \Carbon\Carbon($date))->age
Si no necesita una gran precisión, solo la cantidad de años, puede considerar usar el código a continuación ...
Solo necesita poner esto en una función y reemplazar la fecha "1971-11-20" con una variable.
Tenga en cuenta que la precisión del código anterior no es alta debido a los años bisiestos, es decir, aproximadamente cada 4 años los días son 366 en lugar de 365. La expresión 60 * 60 * 24 * 365 calcula el número de segundos en un año: puede reemplácelo con 31536000.
Otra cosa importante es que, debido al uso de la marca de tiempo UNIX , tiene el problema del año 1901 y del año 2038, lo que significa que la expresión anterior no funcionará correctamente para fechas anteriores al año 1901 y posteriores al año 2038.
Si puede vivir con las limitaciones mencionadas anteriormente, ese código debería funcionar para usted.
fuente
fuente
fuente
He encontrado este script confiable. Toma el formato de fecha como AAAA-mm-dd, pero podría modificarse para otros formatos con bastante facilidad.
fuente
fuente
i18n:
fuente
Pruebe cualquiera de estos utilizando el objeto DateTime
Referencia http://www.calculator.net/age-calculator.html
fuente
Escriba un script PHP para calcular la edad actual de una persona.
Muestra de fecha de nacimiento: 11.4.1987
Solución de muestra:
Código PHP:
Salida de muestra:
Su edad: 30 años, 3 meses, 0 días.
fuente
Esta es mi función para calcular el DOB con el retorno específico de edad por año, mes y día
así como usarlo
fuente
Esta función devolverá la edad en años. El valor de entrada es una cadena de día de nacimiento con formato de fecha (AAAA-MM-DD), por ejemplo: 2000-01-01
Funciona con día - precisión
Saludos, nira
fuente
Si parece que no puedes usar algunas de las funciones más nuevas, aquí hay algo que preparé. Probablemente más de lo que necesita, y estoy seguro de que hay mejores formas, pero es fácil de leer, por lo que debería hacer el trabajo:
Ejemplo de uso:
Espero que esto ayude.
fuente
Debido al año bisiesto, no es aconsejable restar una fecha de otra y establecerla en el número de años. Para calcular la edad como los humanos, necesitarás algo como esto:
fuente
Lo siguiente funciona muy bien para mí y parece ser mucho más simple que los ejemplos que ya se han dado.
He probado y uso activamente este código, puede parecer un poco engorroso, pero es muy fácil de usar y editar y es bastante preciso.
fuente
Siguiendo la primera lógica, debe usar = en la comparación.
fuente
Es un problema cuando usa strtotime con DD / MM / AAAA. No puedes usar ese formato. En lugar de eso, puede usar MM / DD / AAAA (o muchos otros como AAAAMMDD o AAAA-MM-DD) y debería funcionar correctamente.
fuente
¿Qué tal iniciar esta consulta y hacer que MySQL la calcule por usted?
Resultado:
El usuario tiene 27 años y 6 meses (cuenta un mes completo)
fuente
Lo hice así.
fuente
La respuesta principal para esto está bien, pero solo calculó el año en que nació una persona, lo modifiqué para mis propios fines para trabajar el día y el mes. Pero pensé que valía la pena compartirlo.
Esto funciona tomando una marca de tiempo del DOB de los usuarios, pero siéntase libre de cambiar eso
fuente
Si solo desea obtener años completos a medida que envejece, hay una manera súper simple de hacerlo. tratar las fechas formateadas como 'AAAAMMDD' como números y restarlas. Después de eso, cancele la parte MMDD dividiendo el resultado con 10000 y bajando el piso. Simple y nunca falla, incluso toma en cuenta los años lectivos y la hora actual del servidor;)
Desde los primeros días de parto o en su mayoría proporcionados por fechas completas en el lugar de nacimiento y son relevantes para la HORA LOCAL ACTUAL (donde realmente se realiza la verificación de edad).
así que si quieres comprobar si alguien tiene 18 o 21 años o menos de 100 en tu zona horaria (no importa la zona horaria de origen) por cumpleaños, esta es mi forma de hacerlo
fuente
Prueba esto :
fuente