нет судьбы
С нами с 27.03.03
Сообщения: 4427
Рейтинг: 4204
|
Добавлено: 10/11/12 в 00:56 |
В скрипте
Код: | $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", ну и на том же самом приципе годы, на которых можно и остановиться?
|
|
|
|
С нами с 11.10.12
Сообщения: 428
Рейтинг: 1032
|
Добавлено: 10/11/12 в 01:03 |
Это не волшебная палочка. Формат тот же, что у date(), никакой бызныс-логики
|
|
|
|
нет судьбы
С нами с 27.03.03
Сообщения: 4427
Рейтинг: 4204
|
Добавлено: 10/11/12 в 01:26 |
Тогда ищу функцию бизнес логики!
Что-то мне подсказывет с такой свалкой функций как в пхп, она просто обязана быть!
|
|
|
|
С нами с 11.10.12
Сообщения: 428
Рейтинг: 1032
|
Добавлено: 10/11/12 в 01:50 |
Сначала попробуй объяснить интервалу, что такое ГОД
|
|
|
|
нет судьбы
С нами с 27.03.03
Сообщения: 4427
Рейтинг: 4204
|
Добавлено: 10/11/12 в 22:13 |
Вот что у меня получилось:
Код: | 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.
|
|
|
|
С нами с 11.10.12
Сообщения: 428
Рейтинг: 1032
|
Добавлено: 10/11/12 в 22:56 |
Ты неправильно подошёл к смыслу интервала. %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';
} |
проФФесор. с одним "с"
|
|
|
|
нет судьбы
С нами с 27.03.03
Сообщения: 4427
Рейтинг: 4204
|
Добавлено: 10/11/12 в 23:34 |
Я ошибся, я хотел написать - Профф эссор!
Ибо .($a[$k]>1?'s':'').
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |