Счётчик даты/возраста

Stifter

Новичок
Счётчик даты/возраста

Здравствуйте, уважаемые программисты,

Скажите, пожалуйста, как можно реализовать счётчик даты на php?
Т. е. нужно, чтобы на странице отображалось:

Например,
С 8 сентября прошло: 5 лет 6 месяцев 3 дня.

Что-то вроде этого. Если не сложно скажите какой код будет?
Или может скрипт како-то есть?

Заранее благодарен.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Сам пробовал?
 

Stifter

Новичок
Большое спасибо за ссылки, но ткните, пожалуйста, что именно нужно для релизации счётчика даты?
 

iSlayter

Новичок
Ключ от квартиры дать? где деньги лежат

для начала - напиши как ты представляешь себе реализацию этой задачи (взять то-то, сделать с ним то-то, сравнить с тем-то, сплясать то-то, спеть то-то). потом ищи ответы по указанным ссылкам.
 

Stifter

Новичок
Я просто не программист, я дизайнер, но такая вещь нужна.

Пишу как я представляю себе реализацию задачи.

Где-то в коде есть переменная - дата, от которой будет идти счётчик.

При выводе пользователю показывается сколько времени прошло от этой даты.

Если не сложно это, подскажите код, для реализации этой задачи.

-~{}~ 23.11.08 17:12:

iSlayter, да совершенно верно, спрошу.
Php - не мой конёк, а реализовать очень хочется.

-~{}~ 23.11.08 17:19:

silent9
А как посчитать сколько лет и месяцев? Получаю какие-то цифры (вида -2454794).

-~{}~ 23.11.08 17:26:

Вася Патриков
Еще раз спасибо за ссылки. Кое-что уже нашел.
 

Beavis

Banned
Stifter

а ты можешь просто на бумаге посчитать разницу между датами, например, 30.08.2005 и 11.09.2008 ?
 

Stifter

Новичок
А если пишу:
$d = GregorianToJD($m,$d,$y) - GregorianToJD(11,20,2008);
echo $d;
выводится -2454791
почему так?
А мне нужно именно это все разбить на года, месяцы и дни. Как так сделать можно?

Нашел такой код, выводит возраст:

$birthday = "12/9/1945";

$bday = explode("/", $birthday);
$b_mm = $bday[0];
$b_dd = $bday[1];
$b_yyyy = $bday[2];

$bday_mm_dd = mktime(0,0,0,$b_mm,$b_dd,0);
$today_mm_dd = mktime(0,0,0,date("m"),date("d"),0);
$age = date("Y", time()) - $b_yyyy;

if ($bday_mm_dd > $today_mm_dd) {
$age = $age - 1;
}

print $age;

Но, он выводит только Год, а как сделать, чтобы еще и дни и месяцы показывал (хотя бы просто цифрами)?

Ткните, пожалуйста, уважаемые Гуру php.
 

Stifter

Новичок
Я знаю, уважаемый мастер-гуру silent9, а вот как сделать чтобы выводилось вместо просто года, столько-то лет, столько-то месяцев, столько-то дней, не знаю. Вот и спрашиваю. Знал бы не спрашивал.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Stifter
не грузись, они сами толком не много знают, просто им делать нечего

-~{}~ 23.11.08 17:27:

на PHP нет встроенного рассчета временных интервалов, как в некоторых других системах, тут надо самому прописывать приведение к годам, затем - к месяцам

т.е. вариантов несколько:
* можно предположить, что в месяце 30 дней, а в году - 365,
тогда приводишь даты к timestamp, делишь на 60*60*24 - секунд в сутках - получаешь кол-во дней,
делишь на 365, число больше 1 - кол-во лет,
находишь сколько дней прошло в последнем году - вычитаешь 365*к-во лет,
так же делишь на 30 - месяцы, остальное - дни

* можно считать точно, с учетом календаря - тут надо почитать ман, я не помню :)

-~{}~ 23.11.08 17:29:

silent9
а я вот, блин, не знаю, сколько в некотором году дней, и сколько дней в любом месяце
 

Stifter

Новичок
grigori
Большое спасибо за ответ.

Вот так получилось:

$year = 1945;
$month = 12;
$days = 9;
$seconds = time() - mktime(0, 0, 0, $month, $days, $year);
$d = 60*60*24*365.4;
$year = (int)($seconds/$d);
$seconds = $seconds - $year*$d;
$d = 60*60*24*30.4;
$month = (int)($seconds/$d);
$seconds = $seconds - $month*$d;
$d = 60*60*24;
$day = (int)($seconds/$d);
$week = (int)($day/7);
$day = $day - $week*7;
echo "$year л., $month м., $week н. и $day дн.";

Интересно, а как точно по календарю сделать...

-~{}~ 23.11.08 18:38:

silent9
Хотелось бы не округлять.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
silent9
тебе можно, а другим - нет
я бы посмотрел, сколько ты проработаешь в банке, округлив кол-во дней для рассчета % по депозитам
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я думаю, по календарю примерно так можно:
приводить даты к 3м числам:
$date1 = array(2008,11,23);
$date2 = array(2007,3,15);
$years = $date1[0]-$date2[0];
$months = $date1[1]-$date2[1];
$days = $date1[2]-$date2[2];

если $months<0, то $years--, а $month += 12

если $days <0, то $months--,
а к отрицательному $days прибавляешь кол-во дней в предыдушем месяце
 

Beavis

Banned
Stifter
Воспользуйся, пожалуйста, поиском.

Кстати, вряд ли ты найдешь правильное решение, отличающееся от того, что дал выше Grigori.
 
Сверху