freemarket
Новичок
И снова функция подсчёта дней
усложнёная
Добрый день
господа помогите не знаю как справиться .... может кто сталкивался
надо посчитать поличество дней размещения статьи с даты публикации
пробывал использовать :
/**
* Calculate difference between two timestamps
* @param string $date_start start date in unix timestamp
* @param string $date_finish finish date in unix timestamp
* @return array the result array in the follow format: 0 => seconds, 1 => minutes, 2 => hours, 3 => days, 4 => months, 5 => years
* @author zerkms (Ivan Kurnosov)
*/
function calc_period($date_start, $date_finish) {
$st = explode('-', date('d-m-Y-G-i-s', $date_start));
$fin = explode('-', date('d-m-Y-G-i-s', $date_finish));
if (($seconds = $fin[5] - $st[5]) < 0) {
$fin[4]--;
$seconds += 60;
}
if (($minutes = $fin[4] - $st[4]) < 0) {
$fin[3]--;
$minutes += 60;
}
if (($hours = $fin[3] - $st[3]) < 0) {
$fin[0]--;
$hours += 24;
}
if (($days = $fin[0] - $st[0]) < 0) {
$fin[1]--;
$days = date('t', mktime(1, 0, 0, $st[1], $st[0], $st[2])) - $st[0] + $fin[0];
}
if (($months = $fin[1] - $st[1]) < 0) {
$fin[2]--;
$months += 12;
}
$years = $fin[2] - $st[2];
return array($seconds, $minutes, $hours, $days, $months, $years);
}
также пробывал просто
$days = (strtotime($now) - strtotime($pub_date)) / 60/60/24;
но не задача ... все эти функции отталкиваются от 24 часового дня ....
а мне надо вывести новости в таком порядке
если ноль дней - то сегодня
если день прошёл - то вчера
если 3 дня - то позавчера
если 4 дня - то 4 дня ....
а получаются такие вещи что допустим новость опубликована в 4.10 утра - а на данные момент 16.44 и по алгоритму получается что вчера ... где то ошибка получается
или новость опубликовали 22:14 17.01.2009 а в 3:20 18.01.2009 получается что сегодня ....
может кто писал подобную функцию - поделитесь плиз - буду признателен.
если просто отнимать даты ... то это алгоритм работает в течении 31 одного дня ... а если
было например в прошлом месяце и в новом тогда не могу посчитать ...
.......
ещё раз подумал ... решил плясать от таких сравнений в цикле
if(date("Ynj") == date("Ynj", $timestamp + (3600*24*$i))){
}
и вот получил такую функцию
function date_smarty($timestamp){
if (date("Ynj") == date("Ynj", $timestamp) )
$day = "<b style='color:#83b820'>Сегодня</b> ";
elseif (date("Ynj") == date("Ynj", $timestamp + (3600*24)))
$day = "<b>Вчера</b> ";
elseif (date("Ynj") == date("Ynj", $timestamp + (3600*24*2)))
$day = "<b>Позавчера</b>";
else
{
for($i = 3; $i<31; $i++){
if (date("Ynj") == date("Ynj", $timestamp + (3600*24*$i))) {$day = $i; break;}
}
$day = $day . " дней назад";
if($day > 31) $day = date('j', $timestamp)." ".getMonth($timestamp);
}
return $day;
}
возможно есть более интересное решение - будут такие опять же признателен
усложнёнаяДобрый день
господа помогите не знаю как справиться .... может кто сталкивался
надо посчитать поличество дней размещения статьи с даты публикации
пробывал использовать :
/**
* Calculate difference between two timestamps
* @param string $date_start start date in unix timestamp
* @param string $date_finish finish date in unix timestamp
* @return array the result array in the follow format: 0 => seconds, 1 => minutes, 2 => hours, 3 => days, 4 => months, 5 => years
* @author zerkms (Ivan Kurnosov)
*/
function calc_period($date_start, $date_finish) {
$st = explode('-', date('d-m-Y-G-i-s', $date_start));
$fin = explode('-', date('d-m-Y-G-i-s', $date_finish));
if (($seconds = $fin[5] - $st[5]) < 0) {
$fin[4]--;
$seconds += 60;
}
if (($minutes = $fin[4] - $st[4]) < 0) {
$fin[3]--;
$minutes += 60;
}
if (($hours = $fin[3] - $st[3]) < 0) {
$fin[0]--;
$hours += 24;
}
if (($days = $fin[0] - $st[0]) < 0) {
$fin[1]--;
$days = date('t', mktime(1, 0, 0, $st[1], $st[0], $st[2])) - $st[0] + $fin[0];
}
if (($months = $fin[1] - $st[1]) < 0) {
$fin[2]--;
$months += 12;
}
$years = $fin[2] - $st[2];
return array($seconds, $minutes, $hours, $days, $months, $years);
}
также пробывал просто
$days = (strtotime($now) - strtotime($pub_date)) / 60/60/24;
но не задача ... все эти функции отталкиваются от 24 часового дня ....
а мне надо вывести новости в таком порядке
если ноль дней - то сегодня
если день прошёл - то вчера
если 3 дня - то позавчера
если 4 дня - то 4 дня ....
а получаются такие вещи что допустим новость опубликована в 4.10 утра - а на данные момент 16.44 и по алгоритму получается что вчера ... где то ошибка получается
или новость опубликовали 22:14 17.01.2009 а в 3:20 18.01.2009 получается что сегодня ....
может кто писал подобную функцию - поделитесь плиз - буду признателен.
если просто отнимать даты ... то это алгоритм работает в течении 31 одного дня ... а если
было например в прошлом месяце и в новом тогда не могу посчитать ...
.......
ещё раз подумал ... решил плясать от таких сравнений в цикле
if(date("Ynj") == date("Ynj", $timestamp + (3600*24*$i))){
}
и вот получил такую функцию
function date_smarty($timestamp){
if (date("Ynj") == date("Ynj", $timestamp) )
$day = "<b style='color:#83b820'>Сегодня</b> ";
elseif (date("Ynj") == date("Ynj", $timestamp + (3600*24)))
$day = "<b>Вчера</b> ";
elseif (date("Ynj") == date("Ynj", $timestamp + (3600*24*2)))
$day = "<b>Позавчера</b>";
else
{
for($i = 3; $i<31; $i++){
if (date("Ynj") == date("Ynj", $timestamp + (3600*24*$i))) {$day = $i; break;}
}
$day = $day . " дней назад";
if($day > 31) $day = date('j', $timestamp)." ".getMonth($timestamp);
}
return $day;
}
возможно есть более интересное решение - будут такие опять же признателен
)))))