Вывести период времени словами типа - месяц, год

Сенсей

Новичок
Вывести период времени словами типа - месяц, год

Вобщем так. Есть дата регистрации пользователя. Просто выводить ее не кактит.

Нужно так (примеры):

Я зарегистрирован на сайте 1 недел(ю)
Я зарегистрирован на сайте 2 недел(и)
Я зарегистрирован на сайте 3 недел(и)
Я зарегистрирован на сайте 1 месяц
Я зарегистрирован на сайте 2 месяц(а)
Я зарегистрирован на сайте 1 год и 2 месяц(а)
Я зарегистрирован на сайте 1 год и 5 месяц(ев)
Я зарегистрирован на сайте 2 год(а) и 2 месяц(а)

Ну я так подумал тупо брать количество дней и делить его сначало на 12, 7, и 30

PHP:
select DATEDIFF(now(), user_regdate) from users;


$years = $user_date_days_diff/12;
$weeks = $user_date_days_diff/7;
$months = $user_date_days_diff/30;


# Далее тупо ифами проверяем переменные в порядке убывания, сначало проверяем
# $years, потом $months, потом $weeks
# что то вроде этого

if ($years)
{
    echo $years.' год(а)';
    if ($months)
    {
        $months = $user_date_days_diff-(30*$years)
    }
}
if ($months)
{
    echo $months.' месяц(а)';
    if ($weeks)
    {
        $weeks = $user_date_days_diff-(7*$weeks)
    }
}
if ($weeks)
{
    echo $weeks.' недел(и)';
}
Может есть другой подход? Я сейчас не говорю про точность... она не нужна.. и про лексику (месяц - месяца) тоже не говорю...

Или же это самая простая реализация?
 

chisto_tolyan

Враг народа
PHP:
<?php
$birthday='2006-12-04 00:00:00';
$uptime=time()-strtotime($birthday);
if($uptime<0){
  die("Error!");
}
$years=floor($uptime/(60*60*24*365.25));
$monthes=floor(($uptime-$years*(60*60*24*365.25))/(60*60*24*30.3));
$days=floor(($uptime-$years*(60*60*24*365.25)-$monthes*(60*60*24*30.3))/(60*60*24));
$hours=floor(($uptime-$years*(60*60*24*365.25)-$monthes*(60*60*24*30.3)-$days*(60*60*24))/(60*60));
$minutes=floor(($uptime-$years*(60*60*24*365.25)-$monthes*(60*60*24*30.3)-$days*(60*60*24)-$hours*(60*60))/(60));
$seconds=floor($uptime-$years*(60*60*24*365.25)-$monthes*(60*60*24*30.3)-$days*(60*60*24)-$hours*(60*60)-$minutes*60);
echo "Your uptime is: $years years, $monthes monthes, $days days, $hours hours $minutes minutes $seconds seconds";
?>
показывает ваш uptime=) проблема с теми, кто родился раньше 1970 г на Windows(не родился на виндовз, а если скрипт запускать под виндовз)
 

zerkms

TDD infected
Команда форума
chisto_tolyan
по секрету - не в каждом дне 24 часа, а также не в каждом месяце 30 и не в каждом году 365.25 дней
только поклянитесь что никому не расскажете ;)
 

Wicked

Новичок
Я зарегистрирован на сайте 1 365-дневный год, 3 30-дневных месяца назад и 6 24-часовых дня назад :)
 
Сверху