Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вычисление возраста
 
 автор: chexov   (04.03.2008 в 13:05)   письмо автору
 
 

Итак есть дата рождения вида: 11.11.1985
нужно вычислить сколько человеку полных лет

<?php
  $datarojd 
mktime(00011111985);
  
$age = (time()-$datarojd)/31536000;
?>

результат: 22 года, все верно
а если дата рождения 11.11.1940?
windows не допускает отрицательных чисел, подскажите как быть в данной ситуации?

   
 
 автор: chexov   (04.03.2008 в 13:26)   письмо автору
 
   для: chexov   (04.03.2008 в 13:05)
 

и как такое число (11.11.1940) хранить в виде секунд?

   
 
 автор: mihdan   (04.03.2008 в 14:35)   письмо автору
 
   для: chexov   (04.03.2008 в 13:05)
 

http://netck.ru/forum/viewthread.php?forum_id=29&thread_id=1281&pid=10109

   
 
 автор: chexov   (05.03.2008 в 04:28)   письмо автору
 
   для: mihdan   (04.03.2008 в 14:35)
 

вы мне дали тоже самое что и я сам написал, мне нужно вычисление возраста если дата рождения меньше 1970 года например 1940, ваш код выдает мне 38 лет!

   
 
 автор: chexov   (05.03.2008 в 11:32)   письмо автору
 
   для: chexov   (05.03.2008 в 04:28)
 

подскажите кто нибудь?

   
 
 автор: mihdan   (05.03.2008 в 11:50)   письмо автору
 
   для: chexov   (04.03.2008 в 13:05)
 


<?
// Указываем дату и время Вашего рождения(для примера
// возьмем 21 мая 1982 года 19 часов 12 минут и 10 секунд :) )
$sec 10;
$min 12;
$hour 19;

$day 4;
$month 1;
$year 1940;

//Теперь вычислим метку Unix для указанной даты
$birthdate_unix mktime($hour$min$sec$month$day$year);

//Вычислим метку unix для текущего момента
$current_unix time();

//Просчитаем разность меток

$period_unix=$current_unix $birthdate_unix;

// Получаем искомый возраст

// Возраст измеряемый годами
$age_in_years floor($period_unix / (365*24*60*60));

// Возраст измеряемый днями
$age_in_days floor($period_unix / (24*60*60));

// Возраст измеряемый часами
$age_in_hours floor($period_unix / (60*60));

// Возраст измеряемый минутами
$age_in_minutes floor($period_unix 60);

// Возраст измеряемый секундами
$age_in_seconds $period_unix;

// Теперь выводим все это на экран
echo "Ваш возраст составляет $age_in_years год или $age_in_days день, 
      или 
$age_in_hours часов, или $age_in_minutes минут,
      или 
$age_in_seconds секунд.";
?>

   
 
 автор: chexov   (05.03.2008 в 12:00)   письмо автору
 
   для: mihdan   (05.03.2008 в 11:50)
 

проверьте: Ваш возраст составляет 38 год :(((((

   
 
 автор: chexov   (05.03.2008 в 12:22)   письмо автору
 
   для: chexov   (05.03.2008 в 12:00)
 

все то же чт ои у меня:( только другими словами

   
 
 автор: chexov   (05.03.2008 в 13:42)   письмо автору
 
   для: chexov   (05.03.2008 в 12:22)
 

Прошу помощи у cheops'А.................

   
 
 автор: olejek   (05.03.2008 в 13:45)   письмо автору
 
   для: chexov   (05.03.2008 в 13:42)
 

Вам же написали работоспособный код! Что Вам еще нужно??!!

   
 
 автор: chexov   (05.03.2008 в 13:49)   письмо автору
 
   для: olejek   (05.03.2008 в 13:45)
 

Раз вы такой умный, потрудитесь и проверьте какой он работоспособный, говорю же выдает:
38 лет
какой там 38 лет если дата рождения 1940???????????????

   
 
 автор: olejek   (05.03.2008 в 14:07)   письмо автору
 
   для: chexov   (05.03.2008 в 13:49)
 

Я бы не писал, если бы не проверил!
год 1940 -> 68 лет
год 1930 -> 78 лет
год 1910 -> 98 лет

(в большинстве современных систем, где время представляется 32-битным целым со знаком, допустимыми являются значения year между 1901 и 2038)

Внимание: До PHP 5.1.0 отрицательные метки времени не поддерживались под всеми системами Windows, а также некоторыми другими. Следовательно, допустимые значения параметра year были между 1970 и 2038.

Какая у вас версия??

   
 
 автор: chexov   (05.03.2008 в 14:14)   письмо автору
 
   для: olejek   (05.03.2008 в 14:07)
 

версия у меня 5.0.4
код который предложил mihdan дает результат не вымышленный мной а наглядный:
Ваш возраст составляет 38 год или 13943 день, или 334643 часов, или 20078593 минут, или 1204715584 секунд.

   
 
 автор: olejek   (05.03.2008 в 14:17)   письмо автору
 
   для: chexov   (05.03.2008 в 14:14)
 

Да я вам верю!!! Установите новую версию php.

   
 
 автор: chexov   (05.03.2008 в 14:21)   письмо автору
 
   для: olejek   (05.03.2008 в 14:17)
 

Товарищ!!! а мне можно как нибудь без доп установок воплотить свою мечту? разрешить так сказать задачу? если да то как?
Установить на хост новую версию пыха не могу, т.к я не хозяин...

   
 
 автор: olejek   (05.03.2008 в 14:25)   письмо автору
 
   для: chexov   (05.03.2008 в 14:21)
 

Можно, конечно. Используйте функцию date.

   
 
 автор: chexov   (05.03.2008 в 14:27)   письмо автору
 
   для: olejek   (05.03.2008 в 14:25)
 

а примерчик покажите:) а то я совсем упарился....

   
 
 автор: _гость_   (05.03.2008 в 14:36)
 
   для: chexov   (05.03.2008 в 13:49)
 

наверное всётаки strtotime()
<?
echo strtotime("1.10.2000"), "<br>\n";
echo 
date('d. m. Y'970344000) . "<hr>\n";

echo ((
time() - strtotime("1.10.1950"))/31557600) . '<hr>' #если не ошибся с колличеством секунд в году
// echo date('Y', time() ) - date('Y', strtotime("1.10.1950")); # неточно

   
 
 автор: chexov   (05.03.2008 в 14:42)   письмо автору
 
   для: _гость_   (05.03.2008 в 14:36)
 

и?
результат:

01. 10. 2000
38.201340943683

   
 
 автор: olejek   (05.03.2008 в 14:53)   письмо автору
 
   для: chexov   (05.03.2008 в 14:42)
 

Проверьте так, должно работать, хотя этот код требует проверки.
Может кто альтернативный вариант напишет.

<?
$birth_day 
28;
$birth_month 4;
$birth_year 1983;

$now_year=date('Y');
$now_month=date('n');
$now_day=date('j');

if (
$birth_month $now_month)
    
$birth=$now_year $birth_year;
elseif (
$birth_month=$now_month)
    {
    if (
$birth_day $now_day)
        
$birth $now_year $birth_year;
    else
        
$birth $now_year $birth_year 1;
    }
else
    {
    if (
$birth_day $now_day)
        
$birth $now_year $birth_year;
    }
?>

А нет, он не правильный, но что-то в этом роде

   
 
 автор: _гость_   (05.03.2008 в 14:56)
 
   для: olejek   (05.03.2008 в 14:53)
 

или getdate вам поможет
<?
print_r
(getdate(strtotime("1.10.1950")));
print_r(getdate(time()));

   
 
 автор: mihdan   (05.03.2008 в 17:26)   письмо автору
 
   для: _гость_   (05.03.2008 в 14:56)
 

У меня на половине серверов getdate отказывается работать, код что дал вая я работает - проверил на нескольких серверах на разных версиях РНР. Что-то у вас криво ))) Обновите РНР )))

   
 
 автор: chexov   (05.03.2008 в 14:56)   письмо автору
 
   для: olejek   (05.03.2008 в 14:53)
 

ООО!!!! великолепно! все четко работает:) спасибо огромное вам!

   
 
 автор: olejek   (05.03.2008 в 15:11)   письмо автору
 
   для: chexov   (05.03.2008 в 14:56)
 

Замените на этот код, а то там есть ошибки.
А вообще и этот можно оптимизировать.


<?
$birth_day 
28;
$birth_month 4;
$birth_year 1983;

$now_year=date('Y');
$now_month=date('n');
$now_day=date('j');

if (
$birth_month $now_month)
    
$birth=$now_year $birth_year;
elseif (
$birth_month==$now_month)
    {
    if (
$birth_day $now_day)
        
$birth $now_year $birth_year;
    else
        
$birth $now_year $birth_year 1;
    }
else
    
$birth $now_year $birth_year 1;
?>


Вот оптимизированный код:
<?
$birth_day 
28;
$birth_month 4;
$birth_year 1983;

$now_year=date('Y');
$now_month=date('n');
$now_day=date('j');

$birth=$now_year $birth_year;

if ((
$birth_month==$now_month && $birth_day $now_day) || $birth_month>$now_month)
        
$birth -= 1;
?>

   
 
 автор: chexov   (05.03.2008 в 17:50)   письмо автору
 
   для: olejek   (05.03.2008 в 15:11)
 

впринципе все то же самое:) точность соблюдается до марта, после марта, год округляется:(
mihdan что значит обновите PHP, я же говорю, нет возможности ничего обновить... кривости в скрипте быть не может, т.к я тестирую чисто ваш код: результат: Ваш возраст составляет 38 год или 13943 день, или 334643 часов, или 20078593 минут, или 1204715584 секунд.

   
 
 автор: kis-kis   (07.03.2008 в 11:16)   письмо автору
 
   для: chexov   (05.03.2008 в 17:50)
 

Точность день в день, проверьте сами:


function mysql2data($sqldata,$b=NULL) { 
   global $wmm; 
   $sqldata=str_replace(' ','-',$sqldata); 
   $val = explode('-', $sqldata); 
   if($b==NULL) { 
      $data= substr($wmm[intval($val[1])],0,3).' '.$val[2].' '.$val[0]; 
   } else { 
   $bd=$val[0].$val[1].$val[2];$dat=date("Ymd",time()); 
   $data=intval(($dat - $bd) / 10000); 
   } 
   return $data; 
}

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования