PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
  • Галерея
Календарь
Апрель (2021)
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627282930  
В продаже

  • Что нового?

    • Тест №2
    • Тест №1 для разработчиков
    • PHP 5.6 RC1
    • SQL. Как cкопировать данные одной колонки в другую, в той же таблице
    • GRUB изменить порядок загрузки OS в Linux
    • SSH - вход на сервер без ввода пароля
    • PhpMyAdmin - проблема с загрузкой большого файла на сервер
  • Комментарии

    • тут нечего не понятно
    • Может уже пора на WebStorm переходит...
    • Здравствуйте. 10 лет пользуюсь др...
    • Была такая проблема, решалась пе...
    • Возможно с течением времени этот...
  • TOP-5

    • Метод POST (2940401)
    • Привет, МИР! (907352)
    • Метод GET (662403)
    • Операторы (602295)
    • Firefox уже запущен, но не отвечает... (347602)

Узнать возраст человека по дате рождения

Главная » Уроки PHP » Узнать возраст человека по дате рождения
PHP урок № 283

Вычислить возраст пользователя.

Письмо:

Здравствуйте. Предлагаю еще интересный урок. Имеется дата рождения: день, месяц, год. Нужно узнать, сколько лет человеку, естественно, включая текущую дату.
Дано:
$a='01'; $b='05'; $c='1994';
Результат: 15

Ответ:

В PHP есть встроенные функции для работы с датой и временем с двумя из них мы сейчас и познакомимся. Подробную информацию о работе этих функций и многих других, можно получить на сайтах представляющих мануал по всем функциям и объектам PHP. Представление их сейчас, выходит за рамки данного урока.
Есть такое понятие в программирование временная отметка Unix. Что это значит?
Во временной отметки Unix время отображается или представлено (это уж как вам угодно), как количество секунд прошедших с начала эпохи Unix. Это значит количество секунд с 1.1.1970 года. Посмотреть на это можно с помощью функции time().

Листинг № 1 - Функция time() возвращает временную отметку Unix

<?php

  
echo time(); // вывела 1266100644

?>
Сейчас на очереди функция mktime() - эта функция возвращает количество секунд прошедших с начала эпохи Unix, т.е. с 1.1.1970, по число введённое в качестве аргументов функции. Синтаксис этой функции описан ниже.
mktime
(PHP 3, PHP 4)

mktime - получает UNIX timestamp даты.

Описание
int mktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])

is_dst может быть установлен в 1, если это период с поправкой на летнее время, в 0 - если нет, или -1 (по умолчанию), если не известно, находится данное время в периоде с поправкой на летнее время или нет. Если это не известно, PHP пытается определить это сам. Это может привести к неожиданным (но не некорректным) результатам.

phpclub
Аргументы имеющиеся в функции достаточно понятно описаны. Это есть:
  • hour - часы (0-23),
  • minute - минуты (0-59),
  • second - секунды (0-59),
  • month - месяцы (1-12),
  • day - дни (1-31),
  • year - может быть двух или 4-х значным значением. Со значениями 0-69, отображающимися как 2000-2069, и 70-99 - как 1970-1999 (в системах, где time_t это 32-битное знаковое целое, как в большинстве современных систем, правильным диапазоном year будет примерно 1902-2037).

Листинг № 2 - Пример работы функции mktime() в работе

<?php

  
echo mktime(0,0,0,2,14,2010); // выведет на монитор разницу в секундах между 00:00:00 01.01.1970 и 00:00:00
14.02.2010

?>
Заметьте в этой функции месяц идёт первым, потом идёт день и год.
Думаю вы уже догадались по какому алгоритму будет реализован данный урок. Мы в первом листинге узнали сколько всего секунд прошло с начала эпохи unix, во втором листинге узнали сколько секунд прошло до даты рождения пользователя. Теперь вычтем результат второго листинга из результата первого, получим разницу в секундах между двумя датами. Эту разницу надо пересчитать в года. В году у нас 365 суток, в сутках 24 часа, в часе 60 минут и наконец в 1 минуте 60 секунд.
Следовательно в году 31536000 секунд.
Значит разницу делим на 31536000 секунд равно возраст! Функция explode делит строку по разделителю, представленному в первом аргументе. В данном случаи это точка. Проще сказать отделяет целую часть от дробной и заносит в переменную $a. Как это может выглядеть представлено ниже.

Листинг № 3 - Вычисляем возраст пользователя зная его дату рождения.

<?php
    $m 
= 10;
    
$d = 29;
    
$y = 85;

    
$r = mktime(0, 0, 0, $m, $d, $y); 
    
$age = (time()-$r)/31536000;
    list(
$a) = explode(".",$age);  
    echo  
$a; 
?>

Урок закончен.

SETTER © LPHP.RU
Администрация сайта
13.02.2010 22:17:42

Обсудить на форуме.
ВАРИАНТ 2 для PHP 5.3+
Этот пример для ООП, хотя можно и в процедурном написать.
<?php

$timeZone 
= new DateTimeZone ( 'Europe/Moscow' ); // временная зона
$datetime1 = new DateTime ( '1970-10-29 10:00:00', $timeZone ); // д.р.
$datetime2 = new DateTime (); // текущая дата
$interval = $datetime1->diff ( $datetime2 ); // собственно вычисление
echo $interval->format ( '%y year %m mes %d day %h hours %i min %s sec' ); // вывод на экран

// 43 year 7 mes 22 day 9 hours 43 min 6 sec
?>
Понравился урок? Не пропусти следующий!
Рекомендованные уроки этого раздела:
  • Загрузка файлов
  • Как выводить по 3 фото в строку.
  • Как сделать счетчик загрузок для файлов.
  • Случайный вывод картинки

Напишите свой комментарий
Ваше имя
Сообщение
Введите цифры с картинки:
 

Комментарии

Алексей К 10.08.2010 06:06:08
echo (date("Y")-$y-((intval($m.$d)-intval(date("m").date("d"))>0)?1:0)); так лучше
SETTER 10.08.2010 16:44:33
Только год нужно писать полностью. Такая запись например 85 - не сработает.
павел 05.10.2011 13:36:22
функции работаю неправильно есть ошибки
Hevel 13.10.2011 07:16:05
Если человек родился в 1940 году, то не правильно идет подсчет.
Дмитрий 06.02.2012 22:00:10
А если год високосный?) Так что тут могут быть расхождения. Конечно для того, что бы произошел сдвиг хотя бы на 1 год в результате выполнения функции, в реальной жизни придется прожить о-го-го(столько не живут), но всё же.
fan2mas 20.03.2012 08:15:55
если год высокосный и день рождения вчера программа не сработает
Антон 17.10.2012 09:29:29
Неверно. В году не 365 дней. Есть високосные года.
Максим 25.12.2012 21:59:29
time() эта функция исчисляет лишь до 2037 года по моему, потом все будет сначала!
евгения 22.04.2013 16:12:15
чё за хрень?
дмитрий 16.10.2013 20:32:12
попробуйте ввести дату 31 12 1978 сейчас 2013 он мне выдаст 33 года???? а должен 34 подумайте почему?
Саня 05.11.2013 05:29:14
приметивный урок.счёт не верен.нужен учёт высокосного года
  • Яндекс.Метрика Здесь находится аттестат нашего WM идентификатора 185571665285
  • "LPHPRU" © 2009-2021