как узнать возраст юзера?

Discussion in 'PHP' started by Дикс, 4 Mar 2008.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Есть дата рождения.
    Есть текущая дата.
    Надо узнать скока человеку лет.

    В голове одна каша!

    Перевожу обе даты в timestamp, считаю их разницу,
    остаётся понять как из этой кучи секунд получить года?
     
    1 person likes this.
  2. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    PHP:
    <?php

    function calc_period($date_start, $date_finish) {
                    
    $st = explode('-', date('d-m-Y-H-i-s', $date_start));
                    
    $fin = explode('-', date('d-m-Y-H-i-s', $date_finish));

                    if ((
    $seconds = $fin[5] - $st[5]) < 0) {
                            
    $fin[4]--;
                            
    $seconds += 60;
                    }

                    if ((
    $minutes = $fin[4] - $st[4]) < 0) {
                            
    $fin[3]--;
                            
    $minutes += 60;
                    }

                    if ((
    $hours = $fin[3] - $st[3]) < 0) {
                            
    $fin[0]--;
                            
    $hours += 24;
                    }

                    if ((
    $days = $fin[0] - $st[0]) < 0) {
                            
    $fin[1]--;
                            
    $days = date('t', mktime(1, 0, 0, $st[1], $st[0], $st[2])) - $st[0] + $fin[0];
                    }

                    if ((
    $months = $fin[1] - $st[1]) < 0) {
                            
    $fin[2]--;
                            
    $months += 12;
                    }

                    
    $years = $fin[2] - $st[2];
                    
                    return array(
    $seconds, $minutes, $hours, $days, $months, $years);
    }


    // Примеры использования

    $date_finish = strtotime("1-03-2008");
    $date_start = strtotime("31-01-2008");

    $result = calc_period($date_start, $date_finish);

    echo 
    'C ' . date('h:i:s d-m-y', $date_start) . ' по '. date('h:i:s d-m-y', $date_finish) .' прошло ' . $result[0] . ' секунд ' . $result[1]. ' минут ' .$result[2] . ' часов ' .$result[3] . ' дней ' . $result[4] . ' месяцев ' . $result[5] . ' лет <br>';

    ?>
     
  3. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    $текущая дата(секунды) - $рождения = date("ШАБЛОН ДАТЫ",$резултат);
     
  4. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Посчитать возраст человека, дата рождения которого хранится в поле DATE


    PHP:
    SELECT name, IF ((MONTH(NOW())>MONTH(birthday)),(YEAR(NOW())-YEAR(birthday)),
    IF ((
    MONTH(NOW())>IF ((DAYOFMONTH(NOW())>=DAYOFMONTH(birthday)),(YEAR(NOW())-YEAR(birthday)),
    IF ((
    MONTH(NOW())>(YEAR(NOW())-YEAR(birthday)-1))) as years_old FROM person
     
  5. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    2 Naydav
    спасибо! работает.

    2 Bul
    я так и делал. это неправильно.
     
  6. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Врать только не надо)

    PHP:
    <?php
    $a 
    = mktime(0,0,0,9,1,1991);
    $c = time() - $a;
    $d = date("Y", $c);
    $b = $d - 1970;
    echo 
    "Онотолию $b лет";
    ?>
     
    #6 Doom123, 4 Mar 2008
    Last edited: 4 Mar 2008
  7. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4


    PHP:
    <?

    $a = mktime(0,0,0,3,5,2007);
    $c = time() - $a;
    $d = date("Y", $c);
    $b = $d - 1970;
    echo 
    "Онотолию $b лет";


    ?>
    Сегодня - 4 марта 2008 года:

    >>Онотолию 1 лет

    Хотя, будет 1, только завтра
     
    #7 Naydav, 4 Mar 2008
    Last edited: 4 Mar 2008
  8. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Записывать дату рождения в формате UNIXTIME
    Далее выдираем time() - columntime = time..
    Ну и date
     
  9. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Naydav

    PHP:
    <? 

    $a = mktime(23,60,61,3,5,2007); 
    $c = time() - $a; 
    $d = date("Y", $c); 
    $b = $d - 1970; 
    echo 
    "Онотолию $b лет"; 


    ?>
     
    #9 Doom123, 4 Mar 2008
    Last edited: 4 Mar 2008
  10. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Толик знает ВСЕ!
     
  11. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    исходя из этого скрипта, толяну всё равно 1 год =/
    если уж полный возраст надо узнать (т.е. без учёта дня рождения), то зачем mktime и прочие извращенства использовать?
    И кстати орфографическая ошибка...ОнотолЕй пишется через Е :D
    PHP:
    <?php
    $d 
    = date("Y");
    $b = $d - 1970;
    echo 
    'Онотолею'. $b. 'лет';
    ?>
     
    1 person likes this.
  12. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Ы Прав=))))

    но мк тайм всёравно нужен например дата рождения
    01.09.1991 а сёдня дата 01.08.2008

    2008-1991 = 17 а ему 17ти ещё нет))
    а да это посто не точность в секундах=\
     
    #12 Doom123, 4 Mar 2008
    Last edited: 4 Mar 2008
  13. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    PHP:
    <?php 
    $a 
    = mktime(0,0,0,9,1,1991); 
    $c = time() - $a; 
    $d = date("Y", $c); 
    $b = $d - 1970; 
    echo 
    "Онотолию $b лет"; 
    ?>
    да ёпт, я это в первый раз именно так и реализовал!
    гнилой этот метод в том, что если задать дату рождения 1915 - Онотолею блять минус сорок четыре года!! (соре за излишнюю эмоциональность. с новой аватарой я стал раздражительным =\)

    ЗЫ трудна бля быть не таким как фсе =\
     
    #13 Дикс, 5 Mar 2008
    Last edited: 5 Mar 2008
  14. SleepShadowWeb

    Joined:
    2 Feb 2006
    Messages:
    26
    Likes Received:
    15
    Reputations:
    0
    function Change_year(bd_day, bd_month, bd_year)
    {
    var _age;
    var d = new Date();

    cur_day = d.getDate();
    cur_month = d.getMonth() + 1;
    cur_year = d.getFullYear();

    _age = cur_year - bd_year;

    if(cur_month < bd_month)
    {
    _age -= 1;
    }
    else if(cur_month == bd_month)
    {
    if(cur_day < bd_day) _age -= 1;
    }

    if(_age < 0) _age = 0;
    return _age;
    }
     
  15. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    а причем тут собственно яваскрипт?
    речь о пхп