|
|
|
| Итак есть дата рождения вида: 11.11.1985
нужно вычислить сколько человеку полных лет
<?php
$datarojd = mktime(0, 0, 0, 11, 11, 1985);
$age = (time()-$datarojd)/31536000;
?>
|
результат: 22 года, все верно
а если дата рождения 11.11.1940?
windows не допускает отрицательных чисел, подскажите как быть в данной ситуации? | |
|
|
|
|
|
|
|
для: chexov
(04.03.2008 в 13:05)
| | и как такое число (11.11.1940) хранить в виде секунд? | |
|
|
|
|
|
|
|
|
для: mihdan
(04.03.2008 в 14:35)
| | вы мне дали тоже самое что и я сам написал, мне нужно вычисление возраста если дата рождения меньше 1970 года например 1940, ваш код выдает мне 38 лет! | |
|
|
|
|
|
|
|
для: chexov
(05.03.2008 в 04:28)
| | подскажите кто нибудь? | |
|
|
|
|
|
|
|
для: 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 секунд.";
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(05.03.2008 в 11:50)
| | проверьте: Ваш возраст составляет 38 год :((((( | |
|
|
|
|
|
|
|
для: chexov
(05.03.2008 в 12:00)
| | все то же чт ои у меня:( только другими словами | |
|
|
|
|
|
|
|
для: chexov
(05.03.2008 в 12:22)
| | Прошу помощи у cheops'А................. | |
|
|
|
|
|
|
|
для: chexov
(05.03.2008 в 13:42)
| | Вам же написали работоспособный код! Что Вам еще нужно??!! | |
|
|
|
|
|
|
|
для: olejek
(05.03.2008 в 13:45)
| | Раз вы такой умный, потрудитесь и проверьте какой он работоспособный, говорю же выдает: какой там 38 лет если дата рождения 1940??????????????? | |
|
|
|
|
|
|
|
для: chexov
(05.03.2008 в 13:49)
| | Я бы не писал, если бы не проверил!
год 1940 -> 68 лет
год 1930 -> 78 лет
год 1910 -> 98 лет
(в большинстве современных систем, где время представляется 32-битным целым со знаком, допустимыми являются значения year между 1901 и 2038)
Внимание: До PHP 5.1.0 отрицательные метки времени не поддерживались под всеми системами Windows, а также некоторыми другими. Следовательно, допустимые значения параметра year были между 1970 и 2038.
Какая у вас версия?? | |
|
|
|
|
|
|
|
для: olejek
(05.03.2008 в 14:07)
| | версия у меня 5.0.4
код который предложил mihdan дает результат не вымышленный мной а наглядный:
Ваш возраст составляет 38 год или 13943 день, или 334643 часов, или 20078593 минут, или 1204715584 секунд. | |
|
|
|
|
|
|
|
для: chexov
(05.03.2008 в 14:14)
| | Да я вам верю!!! Установите новую версию php. | |
|
|
|
|
|
|
|
для: olejek
(05.03.2008 в 14:17)
| | Товарищ!!! а мне можно как нибудь без доп установок воплотить свою мечту? разрешить так сказать задачу? если да то как?
Установить на хост новую версию пыха не могу, т.к я не хозяин... | |
|
|
|
|
|
|
|
для: chexov
(05.03.2008 в 14:21)
| | Можно, конечно. Используйте функцию date. | |
|
|
|
|
|
|
|
для: 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")); # неточно
|
| |
|
|
|
|
|
|
|
для: _гость_
(05.03.2008 в 14:36)
| | и?
результат:
01. 10. 2000
38.201340943683
|
| |
|
|
|
|
|
|
|
для: 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()));
|
| |
|
|
|
|
|
|
|
для: _гость_
(05.03.2008 в 14:56)
| | У меня на половине серверов getdate отказывается работать, код что дал вая я работает - проверил на нескольких серверах на разных версиях РНР. Что-то у вас криво ))) Обновите РНР ))) | |
|
|
|
|
|
|
|
для: olejek
(05.03.2008 в 14:53)
| | ООО!!!! великолепно! все четко работает:) спасибо огромное вам! | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: olejek
(05.03.2008 в 15:11)
| | впринципе все то же самое:) точность соблюдается до марта, после марта, год округляется:(
mihdan что значит обновите PHP, я же говорю, нет возможности ничего обновить... кривости в скрипте быть не может, т.к я тестирую чисто ваш код: результат: Ваш возраст составляет 38 год или 13943 день, или 334643 часов, или 20078593 минут, или 1204715584 секунд. | |
|
|
|
|
|
|
|
для: 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;
}
|
| |
|
|
|