Я ищу способ рассчитать возраст человека, учитывая его DOB в формате дд / мм / гггг.
Я использовал следующую функцию, которая работала отлично в течение нескольких месяцев, пока какой-то сбой не привел к тому, что цикл while никогда не заканчивался и не останавливал весь сайт. Так как почти 100 000 DOB выполняют эту функцию несколько раз в день, трудно определить причину этого.
У кого-нибудь есть более надежный способ подсчета возраста?
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));
$tdate = time();
$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
++$age;
}
return $age;
РЕДАКТИРОВАТЬ: эта функция иногда работает нормально, но возвращает «40» для DOB от 14.09.1986
return floor((time() - strtotime($birthdayDate))/31556926);
mktime()
. Кажется, php просчиталсяstrtotime()
с этим форматом.strtotime
прекрасно понимает форматы дат, вам не нужно беспокоиться: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.phpНачиная с PHP 5.3.0, вы можете использовать эту удобную функцию,
DateTime::createFromFormat
чтобы убедиться, что ваша дата не будет ошибочно принята заm/d/Y
формат иDateInterval
класс (черезDateTime::diff
), чтобы получить количество лет между текущей и целевой датой.источник
источник
Я использую дату / время для этого:
источник
Простой метод расчета возраста от доб:
31556926
количество секунд в году.источник
$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
// Возрастной калькулятор
источник
Я считаю, что это работает и просто.
Вычтите из 1970, потому что strtotime вычисляет время из 1970-01-01 ( http://php.net/manual/en/function.strtotime.php )
Полученные результаты:
источник
Если вы хотите рассчитать возраст использования dob, вы также можете использовать эту функцию. Он использует объект DateTime.
источник
Подумал, что я добавлю это здесь, так как это, кажется, самая популярная форма этого вопроса.
Я провел 100-летнее сравнение трех наиболее популярных типов возрастных функций, которые я мог найти для PHP, и опубликовал результаты (а также функции) в своем блоге. .
Как вы можете видеть здесь , все 3 funcs хорошо преформы только с небольшой разницей на 2 - е функции. Мое предложение, основанное на моих результатах, состоит в том, чтобы использовать 3-ю функцию, если вы не хотите делать что-то конкретное в день рождения человека, и в этом случае 1-я функция предоставляет простой способ сделать именно это.
Мои предложения после моего 100-летнего обзора:
Если вы хотите что-то более вытянутое, чтобы вы могли включать такие случаи, как дни рождения и такие:
Но если вы просто хотите узнать возраст и не более того:
Смотрите БЛОГ
Ключевое примечание о
strtotime
методе:источник
Вы можете использовать
Carbon
библиотеку , которая является расширением API для DateTime.Ты можешь:
или:
источник
age
, которое делаетdiffInYears
. Таким образом, вы можете написать:(new \Carbon\Carbon($date))->age
Если вам не нужна большая точность, просто количество лет, вы можете использовать приведенный ниже код ...
Вам нужно только поместить это в функцию и заменить дату «1971-11-20» на переменную.
Обратите внимание, что точность приведенного выше кода невелика из-за високосных лет, т.е. примерно каждые 4 года дни 366 вместо 365. Выражение 60 * 60 * 24 * 365 вычисляет количество секунд в одном году - вы можете замените его на 31536000.
Другая важная вещь заключается в том, что из-за использования метки времени UNIX возникает проблема как 1901 года, так и 2038 года, что означает, что приведенное выше выражение не будет корректно работать для дат до 1901 года и после 2038 года.
Если вы можете жить с ограничениями, упомянутыми выше, этот код должен работать для вас.
источник
источник
источник
Я нашел этот сценарий надежным. Он принимает формат даты как ГГГГ-мм-дд, но его можно легко изменить для других форматов.
источник
источник
i18n:
источник
Попробуйте любой из них, используя объект DateTime
Ссылка http://www.calculator.net/age-calculator.html
источник
Напишите PHP-скрипт для расчета текущего возраста человека.
Пример даты рождения: 11.4.1987
Пример решения:
PHP-код:
Пример вывода:
Ваш возраст: 30 лет, 3 месяца, 0 дней
источник
это моя функция для расчета DOB с конкретным возвратом возраста по году, месяцу и дню
это как его использовать
источник
Эта функция возвращает возраст в годах. Входное значение - это дата в формате (ГГГГ-ММ-ДД) дня рождения, например: 2000-01-01
Работает с точностью до дня
Ура, нира
источник
Если вы не можете использовать некоторые из более новых функций, вот что я подхватил. Вероятно, больше, чем нужно, и я уверен, что есть лучшие способы, но их легко прочитать, поэтому они должны выполнить свою работу:
Пример использования:
Надеюсь это поможет.
источник
Из-за високосного года нецелесообразно просто вычитать одну дату из другой и ставить ее в число лет. Чтобы рассчитать возраст как у людей, вам понадобится что-то вроде этого:
источник
Нижеследующее прекрасно работает для меня и кажется намного проще, чем примеры, которые уже были приведены.
Я протестировал и активно использую этот код, он может показаться немного громоздким, но он очень прост в использовании и редактировании и достаточно точен.
источник
Следуя первой логике, вы должны использовать = в сравнении.
источник
Это проблема, когда вы используете strtotime с ДД / ММ / ГГГГ. Вы не можете использовать этот формат. Вместо этого вы можете использовать ММ / ДД / ГГГГ (или многие другие, такие как ГГГГММДД или ГГГГ-ММ-ДД), и он должен работать правильно.
источник
Как насчет запуска этого запроса и расчета MySQL для вас:
Результат:
У пользователя есть 27 лет и 6 месяцев (это считается целый месяц)
источник
Я сделал это так.
источник
Лучший ответ на этот вопрос - ОК, но он рассчитывает только год, когда родился человек, я настроил его для своих собственных целей, чтобы определить день и месяц. Но думал, что стоит поделиться.
Это работает, используя временную метку пользователей DOB, но вы можете изменить это
источник
Если вы хотите, чтобы вам было всего полных лет, есть очень простой способ сделать это. считать даты в формате «ГГГГММДД» числами и вычесть их. После этого отмените часть MMDD, разделив результат на 10000 и записав его. Простой и никогда не подводит, даже учитывает високосные годы и ваше текущее время сервера;)
Начиная с дня рождения или, в основном, указываются полные даты на месте рождения, и они имеют отношение к ТЕКУЩЕМУ МЕСТНОМУ ВРЕМЕНИ (где проверка возраста фактически выполняется).
так что если вы хотите проверить, есть ли у кого-то 18, 21 или ниже 100 в вашем часовом поясе (не говоря уже о часовом поясе происхождения) к дню рождения, это мой способ сделать это
источник
Попробуй это :
источник