Вычисление возраста

Даниил

Mc. Shinoda
Вычисление возраста

Доброый день и с наступающим новым годом!
Я столкнулся с проблемой,

У меня есть две полных даты:
1. Сегодняшнее число. (31.12.2005)
2. Дата рождения челвоека (06.11.1990)

Вот вопрос, как программно вычеслить из одной даты другую и получить только возраст без дней, в данном случае 15.
 

Даниил

Mc. Shinoda
Если я правильно понял, то нужно преобразовать обе даты в Unix time затем вычислить и отформатировать?
 

Даниил

Mc. Shinoda
Примерно так получается тогда?
PHP:
<?
$date1 = '2005-12-31';
$date2 = '1990-11-06';
$time1 = strtotime($date1);
$time2 = strtotime($date2);
$level = $time1-$time2;
echo date('d/m/Y', $level);
?>
 

SiMM

Новичок
> Если я правильно понял, то нужно преобразовать обе даты в Unix time затем вычислить и отформатировать?
А сделать explode и выполнить элементарные арифметические действия - не бывает?
 

Даниил

Mc. Shinoda
PHP:
$date1 = '2005-12-31'; 
$date2 = '1990-11-06'; 
$time1 = strtotime($date1); 
$time2 = strtotime($date2); 
$level = $time1-$time2; 
echo date('Y', $level);
После этого года получил 1985, а надо 15 :)
 

white phoenix

Новичок
PHP:
$date1 = '1990-06-27'; 
$date2 = '2005-11-06'; 
$time1 = strtotime($date1); 
$time2 = strtotime($date2);
$v  = abs($time1-$time2);
echo date('y',$v)-70;
// 15
 

Даниил

Mc. Shinoda
Если честно я почитал но так и не подрубил как им пользоваться и как использовать в моём случае... =(

-~{}~ 31.12.05 16:10:

О Спасибо White phoenix, очень благодарен, только поясни, что значит abs(); и чем отличается от explode?

-~{}~ 31.12.05 16:12:

P.S. Ты случайно надеюсь даты перепутал?

-~{}~ 31.12.05 16:13:

P.S.S.> А почему не работает год предположем 1969?
 

white phoenix

Новичок
В таком формате записи можно вообще без strtotime и explode:
PHP:
$date1 = '1990-06-27'; 
$date2 = '2005-11-06'; 
$date1 = str_replace('-','',$date1);
$date2 = str_replace('-','',$date2);
$v  = abs($date1-$date2);
echo substr($v,0,-4);
// 15
Даниил
> Если честно я почитал но так и не подрубил как им пользоваться и как использовать в моём случае... =(
Очень легко. Разбиваешь в массив через '-' и выполняешь нужные действия.
> что значит abs(); и чем отличается от explode?
[m]abs[/m] в данном случае не обязателен, эта функция модуля числа (само число если оно положительное и минус это число если отрицательное), её я применил для того чтобы не получить отрицательное unix_timestamp, ведь мы не знаем как дата была раньше.
> P.S. Ты случайно надеюсь даты перепутал?
Какие?
Даниил
> А почему не работает год предположем 1969?
Потому что unix_timestamp не поддерживает даты раньше 1 января 1970 года, именно поэтому я и предложил последний вариант.
 

white phoenix

Новичок
SiMM
Знаю, аудитория интернета молодеет, но не настолько же :)
PHP:
$date1 = '1991-03-01'; 
$date2 = '1992-02-29';
$date1 = str_replace('-','',$date1); 
$date2 = str_replace('-','',$date2); 
$v  = abs($date1-$date2); 
if (strlen($v) == 4) {$v = '0'.$v;}
$y = substr($v,0,-4);
echo $y;
// 0
 

SiMM

Новичок
> Знаю, аудитория интернета молодеет, но не настолько же
Фишка не в этом. Вариант со strtotime в этом случае будет врать. Просто пока я соображал пример вы успели написать другой вариант ;)
Ну а на последний пример -
PHP:
$date1 = '1991-03-01';
$date2 = '1991-02-29';
;)
Я бы наверно всё же не стал пользовать substr и abs, а использовал бы деление и округление - в этом случае мы получили бы универсальную функцию для вычисления разницы в годах между датами (как положительной, так и отрицательной).
PS: хотя, надо заметить, вариант с explode позволяет бОльшие вольности по отношению к дате - 1991-3-1, или даже привычный русскому человеку порядок цифр - 1-3-1991.
 
Сверху