За последние 24 часа нас посетили 17425 программистов и 1685 роботов. Сейчас ищут 906 программистов ...

Вывод возраста вместе дня рождения

Тема в разделе "PHP для новичков", создана пользователем raikage, 21 дек 2013.

  1. raikage

    raikage Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    48
    Симпатии:
    0
    Хочу вывести возраст вместо дня рождения, но выходит только текущий год, подскажите что не так?


    Код (Text):
    1. //Возраст
    2.            
    3.     $age = $db->super_query("SELECT user_day, user_month, user_year FROM `".PREFIX."_users` WHERE user_id = '{$user_info['user_id']}'");
    4.    
    5.                 $month = $row['user_month'];
    6.                 $day = $row['user_day'];
    7.                 $year = $row['user_year'];
    8.                  function getAge($day, $month, $year) {
    9.                  
    10.                       if($month > date('m') || $month == date('m') && $day > date('d'))
    11.       return (date('Y') - $year - 1);
    12.     else
    13.       return (date('Y') - $year);
    14.   }
    15.                     $age =  getAge($month, $day, $year);
    16.                     $tpl->set('{age}', $age);
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    это ужас-ужас! в mysql есть тип DATE.

    можно считать сразу в запросе: пример из документации — через TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE())

    можно прочитать дату в PHP (придет в виде строки 'YYYY-MM-DD') и считать $now->diff($birthday)->format('%y');
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Проще time() записывать. А уже потом от него ковылять.
     
  4. raikage

    raikage Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    48
    Симпатии:
    0

    а в моем коде где ошибка?
     
  5. raikage

    raikage Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    48
    Симпатии:
    0
    что-то у меня никак не получается(( Помогите кто сможет, в долгу не останусь

    вот вывод дня рождения

    Код (Text):
    1. //День рождение
    2.             $user_birthday = explode('-', $row['user_birthday']);
    3.             $row['user_day'] = $user_birthday[2];
    4.             $row['user_month'] = $user_birthday[1];
    5.             $row['user_year'] = $user_birthday[0];
    6.            
    7.             if($row['user_day'] > 0 && $row['user_day'] <= 31 && $row['user_month'] > 0 && $row['user_month'] < 13){
    8.                 $tpl->set('[not-all-birthday]', '');
    9.                 $tpl->set('[/not-all-birthday]', '');
    10.                
    11.                 if($row['user_day'] && $row['user_month'] && $row['user_year'] > 1929 && $row['user_year'] < 2012)
    12.                     $tpl->set('{birth-day}', '<a href="/?go=search&day='.$row['user_day'].'&month='.$row['user_month'].'&year='.$row['user_year'].'" onClick="Page.Go(this.href); return false">'.langdate('j F Y', strtotime($row['user_year'].'-'.$row['user_month'].'-'.$row['user_day'])).' г.</a>');
    13.                 else
    14.                     $tpl->set('{birth-day}', '<a href="/?go=search&day='.$row['user_day'].'&month='.$row['user_month'].'" onClick="Page.Go(this.href); return false">'.langdate('j F', strtotime($row['user_year'].'-'.$row['user_month'].'-'.$row['user_day'])).'</a>');
    15.             } else {
    16.                 $tpl->set_block("'\\[not-all-birthday\\](.*?)\\[/not-all-birthday\\]'si","");
    17.             }
     
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Везде.
    http://php.ru/manual/class.datetime.html
    http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
    Даты и время можно складывать и вычитать как средствами пхп, так и мускулем. Разберитесь один раз и не портите себе карму написанием скриптов призывающих ктулху )
     
  7. raikage

    raikage Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    48
    Симпатии:
    0
    хммм.. все равно та же фигня, выводит только год 2013
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Произведите отладочный вывод на экран(если вы не делали этого) возможно вы увидите где ошибка
     
  9. raikage

    raikage Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    48
    Симпатии:
    0
    Код (Text):
    1.  
    2. $age = $db->super_query("SELECT user_day, user_month, user_year FROM `".PREFIX."_users` WHERE user_id = '{$user_info['user_id']}'");
    3.                 $month = $row['user_month'];
    4.                 $day = $row['user_day'];
    5.                 $year = $row['user_year'];
    6.     function age($user_birthday){
    7.  list($day,$month,$year) = explode("/",$user_birthday);
    8.  $year_diff  = date("Y") - $year;
    9.  $month_diff = date("F") - $month;
    10.  $day_diff   = date("j") - $day;
    11.  if ($day_diff < 0 && $month_diff==0){$year_diff--;}
    12.  if ($day_diff < 0 && $month_diff < 0){$year_diff--;}
    13.  return $year_diff;
    14.  
    15. }
    16.     $tpl->set('{age}', $year_diff);
    17.    

    предложите кто-нибудь разумное решение, а то я никак не пойму
     
  10. BOG

    BOG Новичок

    С нами с:
    5 ноя 2013
    Сообщения:
    19
    Симпатии:
    0
    Адрес:
    г. Москва
    Какие данные у Вас в таблице в полях user_day, user_month, user_year?
     
  11. raikage

    raikage Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    48
    Симпатии:
    0
    например, 1993-3-9
    т.е j,F,Y
     
  12. BOG

    BOG Новичок

    С нами с:
    5 ноя 2013
    Сообщения:
    19
    Симпатии:
    0
    Адрес:
    г. Москва
    Ответил в личку.
     
  13. raikage

    raikage Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    48
    Симпатии:
    0
    спасибо, решил проблему, но нарисовалась новая

    Код (Text):
    1. $age = $db->super_query("SELECT `user_birthday`,(YEAR(CURRENT_DATE)-YEAR(`user_birthday`))-(RIGHT(CURRENT_DATE,5)<RIGHT(`user_birthday`,5)) AS `age` FROM `".PREFIX."_users` WHERE `user_id` = {$id}");
    2.            
    3.             $tpl->set('{age}', $age);

    теперь в профиле пути картинок меняются, везде, где есть слово age- меняет на возраст юзера...

    например images/menu.png меняет на im19s/menu.png

    не подскажете как бороться?
     
  14. raikage

    raikage Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    48
    Симпатии:
    0