Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расчёт возраста, подскажите как пеализовать ? 
:(
    Опции темы
vintyara
Дата 22.10.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 24.3.2005
Где: Ode$$a

Репутация: 1
Всего: 2



Есть таблица в БД, есть в таблице столбецъ с датой рождения, вида, скаэем ДД.ММ.ГГГГ.
Есть функция в php, которая может подсказать нам, какая сегодня дата. Как посчитать кол-во лет юзеру, беря его данные с БД ? А именно -
допустим мы взяли данные пользователя с БД, родился он 26.01.1984.
php функция сказала нам, что сегодня 22.10.2005
Как нам заставить php посчитать сколько же лет человеку, чьи данные мы вытащили ?
PM MAIL ICQ   Вверх
Mal Hack
Дата 22.10.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Разделяешь по точкам. $a1 - текущая
Считаешь (писал на вскидку):
Код

$year = $a1[2] - $a2[2];
if( ( $a1[1] - $a2[1] ) >= 12 OR ( ( $a1[1] - $a2[1] ) = 11 AND ( $a1[0] - $a2[0] ) >= date( "t" ) )  )
 $year += 1;


Это сообщение отредактировал(а) Mal Hack - 22.10.2005, 23:43
PM ICQ   Вверх
Dandik
Дата 23.10.2005, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.10.2005
Где: Раменское

Репутация: нет
Всего: нет



Код

function Age ($date){
        if(!$date) return false; 
        $date = explode("-",substr($date,0,9));
        $result = date("Y") - $date[0];
            if((date("m") - $date[1]) < 0 )
                return $result - 1;
            else{
                if((date("d") - $date[2]) >= 0 || ((date("m") - $date[1] - 1) >=0 ))
                    return $result;
                else
                    return $result - 1;
            }
    }

Принимает дату в виде стандартного формата MySQL (по умолчанию), возвращает возраст.
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 23.10.2005, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Подправил малость:
Код

<?php

$data1 = date( "d.m.Y" );
$data2 = "12.12.1981";

$a1 = explode( "." , $data1 );
$a2 = explode( "." , $data2 );

$year = $a1[2] - $a2[2];
if( ( $a1[1] - $a2[1] ) < 11 OR ( ( $a1[1] - $a2[1] ) == 11 AND ( $a1[0] - $a2[0] ) < date( "t" ) ) )
  {  $year -= 1;  }

print $year;

?>

PM ICQ   Вверх
vintyara
Дата 24.10.2005, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 24.3.2005
Где: Ode$$a

Репутация: 1
Всего: 2



Mal Hack по твоему примеру результат 20 получился smile (при $data1 = date( "d.m.Y" ), $data2= 26.01.1984 smile
PM MAIL ICQ   Вверх
vintyara
Дата 24.10.2005, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 24.3.2005
Где: Ode$$a

Репутация: 1
Всего: 2



я вот придумал полноценный алгоритм. только мне нужно разковырять
Код

date( "d.m.Y" );

на три переменные -
Код

$day
$month
$year

как это сделать ?
PM MAIL ICQ   Вверх
Dandik
Дата 24.10.2005, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.10.2005
Где: Раменское

Репутация: нет
Всего: нет



Почему не можешь сделать так :
Код

$day = date("d");
$month = date("m");
$year = date("Y");

Или, использя твоё дано :
Код

$arr = explode(".",date("d.m.Y"));
// Элементы массива $arr - искомые переменные

Кстати, чем моя функция тебе не понравилась? неужели не работает?
PM MAIL WWW ICQ   Вверх
vintyara
Дата 24.10.2005, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 24.3.2005
Где: Ode$$a

Репутация: 1
Всего: 2



вот как я придумал smile вроде работает smile

Код

$date_now=date( "d.m.Y" );
$date_bd=$row['date_of_bithd'];
list($day_now, $month_now, $year_now) = split('[/.-]', $date_now);
list($day_bd, $month_bd, $year_bd) = split('[/.-]', $date_bd);
                        
$day=$day_now - $day_bd;
if ($day <= 0 ) { $day='+'; }
$month=$month_now - $month_bd;
if ($month <= 0 ) { $month='+'; }
$year=$year_now - $year_bd;
if ($day == '+' && $month== '+' ) { $year++; }
echo ''. $year.'';

smile
Добавлено @ 23:17
Dandik чесно говоря неразобрался я с твоей функцией smile что-то у меня незаработала, хотя у меня есть подозрения что я неправильно её юзал. У меня с функциями вообще пока тяжко smile но всё равно спасибо smile
PM MAIL ICQ   Вверх
Aliance
Дата 24.10.2005, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



split не используют для таких целей, где-то я читал.
Используй explode
PM MAIL WWW ICQ Skype   Вверх
Dandik
Дата 24.10.2005, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.10.2005
Где: Раменское

Репутация: нет
Всего: нет



Цитата
у меня есть подозрения что я неправильно её юзал

Код

function Age ($date){
        if(!$date) return false; 
        $date = explode("-",substr($date,0,9));
        $result = date("Y") - $date[0];
            if((date("m") - $date[1]) < 0 )
                return $result - 1;
            else{
                if((date("d") - $date[2]) >= 0 || ((date("m") - $date[1] - 1) >=0 ))
                    return $result;
                else
                    return $result - 1;
            }
    }
echo Age("1984-01-26");

PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 25.10.2005, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



vintyara
условие поставь такое:
Цитата
if( $a1[1] < $a2[1] OR ( ( $a1[1] == $a2[1] ) AND ( $a1[0] < $a2[0] ) ) )
  {  $year -= 1;  }

PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.