|
|
|
| Скажите у меня день рождения 24 января 1985 г. Подскажите как можно написать вычитания сегодняшней даты от этой ? что бы точно определить и выести сколько мне лет ? учитывая и месяцы и дни ? | |
|
|
|
|
|
|
|
для: mabelrod
(08.09.2011 в 11:15)
| | с базой работаете? | |
|
|
|
|
|
|
|
для: Valick
(08.09.2011 в 11:45)
| | нет просто, есть день рождения 25.01.1985 и сегодняшняя дата, надо вывести: Сергей, тебе 25 (26) лет. учитывая дни и месяцы. | |
|
|
|
|
|
|
|
для: mabelrod
(08.09.2011 в 11:51)
| | нет просто, есть день рождения 25.01.1985
а где эта информация о дне рождения хранится? | |
|
|
|
|
|
|
|
для: Valick
(08.09.2011 в 12:07)
| | Я не думаю, что в базе данных эту задача будет решаться сильно проще... все-равно придется високосные года учитывать, а деление на 365.25 не точное. | |
|
|
|
|
|
|
|
для: cheops
(08.09.2011 в 12:11)
| | все-равно придется високосные года учитывать
как так? неужели я что-то пропустил? | |
|
|
|
|
|
|
|
для: Valick
(08.09.2011 в 12:48)
| | Понятия не имею... | |
|
|
|
|
|
|
|
для: mabelrod
(08.09.2011 в 11:15)
| | Можно поступить следующим образом
<?php
// 24 января 1985 года
$birthday = mktime(0, 0, 0, 1, 24, 1985);
echo birthday($birthday);
// Количество лет, месяцев и дней, прошедших со дня рождения
function birthday($sec_birthday)
{
// Сегодняшняя дата
$sec_now = time();
// Подсчитываем количество месяцев, лет
for($time = $sec_birthday, $month = 0;
$time < $sec_now;
$time = $time + date('t', $time) * 86400, $month++){
$rtime = $time;
}
// Количество лет
$month = $month - 1;
$year = intval($month / 12);
// Количество месяцев
$month = $month % 12;
// Количество дней
$day = intval(($sec_now - $rtime) / 86400);
$result = declination($year, "год", "года", "лет")." ";
$result .= declination($month, "месяц", "месяца", "месяцев")." ";
$result .= declination($day, "день", "дня", "дней")." ";
return $result;
}
// Склонение числа $num
function declination($num, $one, $ed, $mn, $notnumber = false)
{
// $one="статья";
// $ed="статьи";
// $mn="статей";
if($num === "") print "";
if(($num == "0") or (($num >= "5") and ($num <= "20")) or preg_match("|[056789]$|",$num))
if(!$notnumber)
return "$num $mn";
else
return $mn;
if(preg_match("|[1]$|",$num))
if(!$notnumber)
return "$num $one";
else
return $one;
if(preg_match("|[234]$|",$num))
if(!$notnumber)
return "$num $ed";
else
return $ed;
}
?>
|
PS Протестировать скрипт можно тут. | |
|
|
|
|
|
|
|
для: mabelrod
(08.09.2011 в 11:15)
| | Количество полных лет можно вычислить таким образом:
<?
$date = '25.01.1985';
list($d, $m, $y) = explode('.', $date);
print 'Полных лет - '.floor((intval(date('Ymd')) - intval($y.$m.$d)) / 10000);
|
Вариант на SQL. | |
|
|
|