Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: PHP - формат даты к дням, неделям, месяцам от кол-ва дней?
цитата
10/11/12 в 00:56
 Vyacheslav
В скрипте
Код:
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

Выводит, к примеру, в формате +2 days
Как я понял $interval - это экземпляр DateTime... и метод format умеет творить чудеса!

Что надо вписать в format, чтоб если кол-во дней <7, то писало, например "2 days" или "1 day".., если 7<days<30 - выдавало "1 week", "3 weeks" ..., если 30<days<365, то выводило "1 month", "11 month", ну и на том же самом приципе годы, на которых можно и остановиться?
цитата
10/11/12 в 01:03
 johndoe2
Это не волшебная палочка. Формат тот же, что у date(), никакой бызныс-логики
цитата
10/11/12 в 01:26
 Vyacheslav
Тогда ищу функцию бизнес логики! icon_smile.gif
Что-то мне подсказывет с такой свалкой функций как в пхп, она просто обязана быть!
цитата
10/11/12 в 01:50
 johndoe2
Сначала попробуй объяснить интервалу, что такое ГОД trollface.png
цитата
10/11/12 в 22:13
 Vyacheslav
Вот что у меня получилось:
Код:
function intervaltoday($datefrom) {
    $datetime1 = date_create($datefrom);
    $datetime2 = date_create(date('Y-m-d',time()));
    $interval = $datetime1->diff($datetime2);
    $difference = $interval->format('%a');
    if ($difference<30){
        return $interval->format('%a days ago');
    } elseif (($difference>=30)&&($difference<365)){
        return $interval->format('%m month ago');
    } else {
        return $interval->format('%y years ago');
    }
}

Кто поффессор в PHP укажите пожалуйста на излишки кода или "плохой тон"?

ПС. Не получилось вставить недели. Ибо не нашёл подходящий параметр для форматирования. Короче, format('%W weeks ago') не сработало в PHP 5.
цитата
10/11/12 в 22:56
 johndoe2
Ты неправильно подошёл к смыслу интервала. %a - это просто число, никакой привязки к датам. Если %a == 28, и это полный ферваль, %a тебе об этом не скажет.

Код:
function intervaltoday($datefrom) {
   $item = array('year','month','week','day');
   $datetime1 = date_create($datefrom);
   $datetime2 = date_create(date('Y-m-d',time()));
   $interval = $datetime1->diff($datetime2);
   $a = explode(':',$interval->format('%y:%m::%d'));
   if ($a[0]) $k = 0;
   elseif ($a[1]) $k = 1;
   elseif ($a[3]>=7) { $a[2] = floor($a[3]/7); $k = 2; }
   else $k = 3;
   return $a[$k].' '.$item[$k].($a[$k]>1?'s':'').' ago';
}


проФФесор. с одним "с" trollface.png
цитата
10/11/12 в 23:34
 Vyacheslav
Я ошибся, я хотел написать - Проффэссор! icon_smile.gif

Ибо .($a[$k]>1?'s':''). smail54.gif


Эта страница в полной версии