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
Тогда ищу функцию бизнес логики!
Что-то мне подсказывет с такой свалкой функций как в пхп, она просто обязана быть!
цитата
10/11/12 в 01:50
johndoe2
Сначала попробуй объяснить
интервалу
, что такое ГОД
цитата
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';
}
проФФесор. с одним "с"
цитата
10/11/12 в 23:34
Vyacheslav
Я ошибся, я хотел написать - Профф
э
ссор!
Ибо
.($a[$k]>1?'s':'').
Новая тема
Ответить
Эта страница в полной версии