with texto strip_tags remove limpiar from eliminar allow all php

php - texto - string strip_tags



PHP calcula la edad (30)

¿Qué le parece si lanza esta consulta y MySQL lo calcula para usted?

SELECT username ,date_of_birth ,(PERIOD_DIFF( DATE_FORMAT(CURDATE(), ''%Y%m'') , DATE_FORMAT(date_of_birth, ''%Y%m'') )) DIV 12 AS years ,(PERIOD_DIFF( DATE_FORMAT(CURDATE(), ''%Y%m'') , DATE_FORMAT(date_of_birth, ''%Y%m'') )) MOD 12 AS months FROM users

Resultado:

r2d2, 1986-12-23 00:00:00, 27 , 6

El usuario tiene 27 años y 6 meses (cuenta un mes entero)

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 mueva todo el sitio a un alto. Debido a que hay casi 100,000 DOBs que pasan por esta función varias veces al día, es difícil determinar qué fue lo que causó esto.

¿Alguien tiene una manera 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 una fecha de nacimiento del 14/09/1986

return floor((time() - strtotime($birthdayDate))/31556926);


Debido al año bisiesto, no es inteligente simplemente restar una fecha de otra y limitarla al número de años. Para calcular la edad como los humanos, necesitarás algo como esto:

$birthday_date = ''1977-04-01''; $age = date(''Y'') - substr($birthday_date, 0, 4); if (strtotime(date(''Y-m-d'')) - strtotime(date(''Y'') . substr($birthday_date, 4, 6)) < 0) { $age--; }


Encontré este script confiable. Toma el formato de fecha como AAAA-mm-dd, pero podría modificarse para otros formatos con bastante facilidad.

/* * Get age from dob * @param dob string The dob to validate in mysql format (yyyy-mm-dd) * @return integer The age in years as of the current date */ function getAge($dob) { //calculate years of age (input string: YYYY-MM-DD) list($year, $month, $day) = explode("-", $dob); $year_diff = date("Y") - $year; $month_diff = date("m") - $month; $day_diff = date("d") - $day; if ($day_diff < 0 || $month_diff < 0) $year_diff--; return $year_diff; }


Encuentro que esto funciona y es simple.

Resta de 1970 porque strtotime calcula el tiempo desde 1970-01-01 ( php.net/manual/en/function.strtotime.php )

function getAge($date) { return intval(date(''Y'', time() - strtotime($date))) - 1970; }

Resultados:

Current Time: 2015-10-22 10:04:23 getAge(''2005-10-22'') // => 10 getAge(''1997-10-22 10:06:52'') // one 1s before => 17 getAge(''1997-10-22 10:06:50'') // one 1s after => 18 getAge(''1985-02-04'') // => 30 getAge(''1920-02-29'') // => 95


Es un problema cuando usa strtotime con DD / MM / YYYY. No puedes usar ese formato. En lugar de usarlo, puede usar MM / DD / YYYY (u otras muchas como YYYYMMDD o AAAA-MM-DD) y debería funcionar correctamente.


Esta función devolverá la edad en años. El valor de entrada es una cadena de fecha de nacimiento con formato de fecha (AAAA-MM-DD), por ejemplo: 2000-01-01

Funciona con día - precisión

function getAge($dob) { //calculate years of age (input string: YYYY-MM-DD) list($year, $month, $day) = explode("-", $dob); $year_diff = date("Y") - $year; $month_diff = date("m") - $month; $day_diff = date("d") - $day; // if we are any month before the birthdate: year - 1 // OR if we are in the month of birth but on a day // before the actual birth day: year - 1 if ( ($month_diff < 0 ) || ($month_diff === 0 && $day_diff < 0)) $year_diff--; return $year_diff; }

Saludos, nira


Esto funciona bien

<?php //date in mm/dd/yyyy format; or it can be in other formats as well $birthDate = "12/17/1983"; //explode the date to get month, day and year $birthDate = explode("/", $birthDate); //get age from date or birthdate $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md") ? ((date("Y") - $birthDate[2]) - 1) : (date("Y") - $birthDate[2])); echo "Age is:" . $age; ?>


Imaginé que lo lanzaría aquí ya que esta parece ser la forma más popular de esta pregunta.

Ejecuté una comparación de 100 años en 3 de los tipos de funcs de edad más populares que pude encontrar para PHP y publiqué mis resultados (así como las funciones) en mi blog .

Como puede ver allí , los 3 funcs se comportan 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.

Se encontró un pequeño problema con la prueba y otro problema con el segundo método. ¡Actualice pronto en el blog! Por ahora, tomaría nota, el segundo método es aún el más popular que encuentro en línea, ¡y aún así el que encuentro con la mayor cantidad de imprecisiones!

Mis sugerencias después de mi revisión de 100 años:

Si quieres algo más alargado para que puedas incluir ocasiones como cumpleaños y cosas así:

function getAge($date) { // Y-m-d format $now = explode("-", date(''Y-m-d'')); $dob = explode("-", $date); $dif = $now[0] - $dob[0]; if ($dob[1] > $now[1]) { // birthday month has not hit this year $dif -= 1; } elseif ($dob[1] == $now[1]) { // birthday month is this month, check day if ($dob[2] > $now[2]) { $dif -= 1; } elseif ($dob[2] == $now[2]) { // Happy Birthday! $dif = $dif." Happy Birthday!"; }; }; return $dif; } getAge(''1980-02-29'');

Pero si simplemente quieres saber la edad y nada más, entonces:

function getAge($date) { // Y-m-d format return intval(substr(date(''Ymd'') - date(''Ymd'', strtotime($date)), 0, -4)); } getAge(''1980-02-29'');

Ver BLOG

Una nota clave sobre el método php.net/manual/en/function.strtotime.php :

Note: 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. If, however, the year is given in a two digit format and the separator is a dash (-, the date string is parsed as y-m-d. To avoid potential ambiguity, it''s best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.


La respuesta principal para esto está bien, pero solo calculé el año en que nació una persona, la modifiqué para mis propios fines para calcular el día y el mes. Pero pensé que valía la pena compartirlo.

Esto funciona tomando una marca de tiempo de la fecha de nacimiento de los usuarios, pero siéntete libre de cambiar esa

$birthDate = date(''d-m-Y'',$usersDOBtimestamp); $currentDate = date(''d-m-Y'', time()); //explode the date to get month, day and year $birthDate = explode("-", $birthDate); $currentDate = explode("-", $currentDate); $birthDate[0] = ltrim($birthDate[0],''0''); $currentDate[0] = ltrim($currentDate[0],''0''); //that gets a rough age $age = $currentDate[2] - $birthDate[2]; //check if month has passed if($birthDate[1] > $currentDate[1]){ //user birthday has not passed $age = $age - 1; } else if($birthDate[1] == $currentDate[1]){ //check if birthday is in current month if($birthDate[0] > $currentDate[0]){ $age - 1; } } echo $age;


La solución más fácil es usar PHP Carbon que es una extensión de API para DateTime (ver http://carbon.nesbot.com/docs/#api-difference ).

Con solo dos líneas obtendrá lo que desea:

function calculate_age($date) { $date = new /Carbon/Carbon( $date ); return intval( $date->diffInYears() ); }

Limpio y simple.


Lo hice así.

$geboortedatum = 1980-01-30 00:00:00; echo leeftijd($geboortedatum) function leeftijd($geboortedatum) { $leeftijd = date(''Y'')-date(''Y'', strtotime($geboortedatum)); if (date(''m'')<date(''m'', strtotime($geboortedatum))) $leeftijd = $leeftijd-1; elseif (date(''m'')==date(''m'', strtotime($geboortedatum))) if (date(''d'')<date(''d'', strtotime($geboortedatum))) $leeftijd = $leeftijd-1; return $leeftijd; }


Lo siguiente funciona muy bien para mí y parece ser mucho más simple que los ejemplos que ya se han dado.

$dob_date = "01"; $dob_month = "01"; $dob_year = "1970"; $year = gmdate("Y"); $month = gmdate("m"); $day = gmdate("d"); $age = $year-$dob_year; // $age calculates the user''s age determined by only the year if($month < $dob_month) { // this checks if the current month is before the user''s month of birth $age = $age-1; } else if($month == $dob_month && $day >= $dob_date) { // this checks if the current month is the same as the user''s month of birth and then checks if it is the user''s birthday or if it is after it $age = $age; } else if($month == $dob_month && $day < $dob_date) { //this checks if the current month is the user''s month of birth and checks if it before the user''s birthday $age = $age-1; } else { $age = $age; }

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.


Método simple para calcular la edad de dob:

$_age = floor((time() - strtotime(''1986-09-16'')) / 31556926);

31556926 es la cantidad de segundos en un año.


Prueba esto :

<?php $birth_date = strtotime("1988-03-22"); $now = time(); $age = $now-$birth_date; $a = $age/60/60/24/365.25; echo floor($a); ?>


Pruebe cualquiera de estos utilizando el objeto DateTime

$hours_in_day = 24; $minutes_in_hour= 60; $seconds_in_mins= 60; $birth_date = new DateTime("1988-07-31T00:00:00"); $current_date = new DateTime(); $diff = $birth_date->diff($current_date); echo $years = $diff->y . " years " . $diff->m . " months " . $diff->d . " day(s)"; echo "<br/>"; echo $months = ($diff->y * 12) + $diff->m . " months " . $diff->d . " day(s)"; echo "<br/>"; echo $weeks = floor($diff->days/7) . " weeks " . $diff->d%7 . " day(s)"; echo "<br/>"; echo $days = $diff->days . " days"; echo "<br/>"; echo $hours = $diff->h + ($diff->days * $hours_in_day) . " hours"; echo "<br/>"; echo $mins = $diff->h + ($diff->days * $hours_in_day * $minutes_in_hour) . " minutest"; echo "<br/>"; echo $seconds = $diff->h + ($diff->days * $hours_in_day * $minutes_in_hour * $seconds_in_mins) . " seconds"; echo "<br/>";

Referencia http://www.calculator.net/age-calculator.html


Si desea calcular la edad de uso del dob, también puede usar esta función. Utiliza el objeto DateTime.

function calcutateAge($dob){ $dob = date("Y-m-d",strtotime($dob)); $dobObject = new DateTime($dob); $nowObject = new DateTime(); $diff = $dobObject->diff($nowObject); return $diff->y; }


Si desea obtener solo años como la edad, 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 entre 10000 y aplanándolo. Simple y nunca falla, incluso toma en cuenta años leap y su tiempo de servidor actual;)

Desde birthays o mayormente proporcionados por fechas completas en el lugar de nacimiento y son relevantes para el TIEMPO LOCAL ACTUAL (donde el control de edad se realiza realmente).

$now = date[''Ymd'']; $birthday = ''19780917''; #september 17th, 1978 $age = floor(($now-$birtday)/10000);

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) antes de cumpleaños, esta es mi manera de hacerlo.


Si no necesita una gran precisión, solo el número de años, podría considerar usar el siguiente código ...

print floor((time() - strtotime("1971-11-20")) / (60*60*24*365));

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 UNIX Timestamp tiene el problema del año 1901 y el año 2038, lo que significa que la expresión anterior no funcionará correctamente para las fechas anteriores al año 1901 y después del año 2038.

Si puede vivir con las limitaciones mencionadas anteriormente, ese código debería funcionar para usted.


Si parece que no puede usar algunas de las funciones más nuevas, aquí hay algo que mejoré. 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:

function get_age($date, $units=''years'') { $modifier = date(''n'') - date(''n'', strtotime($date)) ? 1 : (date(''j'') - date(''j'', strtotime($date)) ? 1 : 0); $seconds = (time()-strtotime($date)); $years = (date(''Y'')-date(''Y'', strtotime($date))-$modifier); switch($units) { case ''seconds'': return $seconds; case ''minutes'': return round($seconds/60); case ''hours'': return round($seconds/60/60); case ''days'': return round($seconds/60/60/24); case ''months'': return ($years*12+date(''n'')); case ''decades'': return ($years/10); case ''centuries'': return ($years/100); case ''years'': default: return $years; } }

Ejemplo de uso:

echo ''I am ''.get_age(''September 19th, 1984'', ''days'').'' days old'';

Espero que esto ayude.


Siguiendo la primera lógica, debes usar = en la comparación.

<?php function age($birthdate) { $birthdate = strtotime($birthdate); $now = time(); $age = 0; while ($now >= ($birthdate = strtotime("+1 YEAR", $birthdate))) { $age++; } return $age; } // Usage: echo age(implode("-",array_reverse(explode("/",''14/09/1986'')))); // format yyyy-mm-dd is safe! echo age("-10 YEARS") // without = in the comparison, will returns 9. ?>


Uso el siguiente método para calcular la edad:

$oDateNow = new DateTime(); $oDateBirth = new DateTime($sDateBirth); // New interval $oDateIntervall = $oDateNow->diff($oDateBirth); // Output echo $oDateIntervall->y;


Yo uso Fecha / Hora para esto:

$age = date_diff(date_create($bdate), date_create(''now''))->y;


esta es mi función para calcular la fecha de nacimiento con el rendimiento específico de la edad por año, mes y día

function ageDOB($y=2014,$m=12,$d=31){ /* $y = year, $m = month, $d = day */ date_default_timezone_set("Asia/Jakarta"); /* can change with others time zone */ $ageY = date("Y")-intval($y); $ageM = date("n")-intval($m); $ageD = date("j")-intval($d); if ($ageD < 0){ $ageD = $ageD += date("t"); $ageM--; } if ($ageM < 0){ $ageM+=12; $ageY--; } if ($ageY < 0){ $ageD = $ageM = $ageY = -1; } return array( ''y''=>$ageY, ''m''=>$ageM, ''d''=>$ageD ); }

esto como usarlo

$age = ageDOB(1984,5,8); /* with my local time is 2014-07-01 */ echo sprintf("age = %d years %d months %d days",$age[''y''],$age[''m''],$age[''d'']); /* output -> age = 29 year 1 month 24 day */


i18n:

function getAge($birthdate, $pattern = ''eu'') { $patterns = array( ''eu'' => ''d/m/Y'', ''mysql'' => ''Y-m-d'', ''us'' => ''m/d/Y'', ); $now = new DateTime(); $in = DateTime::createFromFormat($patterns[$pattern], $birthdate); $interval = $now->diff($in); return $interval->y; } // Usage echo getAge(''05/29/1984'', ''us''); // return 28


// Calculadora de edad

function getAge($dob,$condate){ $birthdate = new DateTime(date("Y-m-d", strtotime(implode(''-'', array_reverse(explode(''/'', $dob)))))); $today= new DateTime(date("Y-m-d", strtotime(implode(''-'', array_reverse(explode(''/'', $condate)))))); $age = $birthdate->diff($today)->y; return $age; } $dob=''06/06/1996''; //date of Birth $condate=''07/02/16''; //Certain fix Date of Age echo getAge($dob,$condate);


function dob ($birthday){ list($day,$month,$year) = explode("/",$birthday); $year_diff = date("Y") - $year; $month_diff = date("m") - $month; $day_diff = date("d") - $day; if ($day_diff < 0 || $month_diff < 0) $year_diff--; return $year_diff; }


$date = new DateTime($bithdayDate); $now = new DateTime(); $interval = $now->diff($date); return $interval->y;


$birthday_timestamp = strtotime(''1988-12-10''); // Calculates age correctly // Just need birthday in timestamp $age = date(''md'', $birthday_timestamp) > date(''md'') ? date(''Y'') - date(''Y'', $birthday_timestamp) - 1 : date(''Y'') - date(''Y'', $birthday_timestamp);


$tz = new DateTimeZone(''Europe/Brussels''); $age = DateTime::createFromFormat(''d/m/Y'', ''12/02/1973'', $tz) ->diff(new DateTime(''now'', $tz)) ->y;

A partir de PHP 5.3.0, puede utilizar el útil DateTime::createFromFormat para asegurarse de que su fecha no se DateInterval el formato m/d/Y y la clase DateInterval (a través de DateTime::diff ) para obtener el número de años entre ahora y la fecha objetivo


//replace / with - so strtotime works $dob = strtotime(str_replace("/","-",$birthdayDate)); $tdate = time(); return date(''Y'', $tdate) - date(''Y'', $dob);