Вычислить возраст пользователя.
Письмо:
Здравствуйте. Предлагаю еще интересный урок. Имеется дата рождения: день, месяц, год. Нужно узнать, сколько лет человеку, естественно, включая текущую дату.
Дано:
$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 пытается определить это сам. Это может привести к неожиданным (но не некорректным) результатам.
Аргументы имеющиеся в функции достаточно понятно описаны. Это есть:
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 секунд равно возраст!Значит разницу делим на 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;
?>
Урок закончен.