И снова функция подсчёта дней :( усложнёная

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;
}

возможно есть более интересное решение - будут такие опять же признателен
 

Фанат

oncle terrible
Команда форума
а пробовал не использовать, а сам написать?
вычисление дат в третьем классе проходят.
 

x-yuri

Новичок
PHP:
$time_stamp = strtotime($pub_date);
$today = mktime(0, 0, 0);
$days = ($today - $time_stamp) / 60/60/24;
$days =   $days < 0   ? 0
                      : floor( $days );
 

dimagolov

Новичок
x-yuri, ты когда поймешь что нужно решать задачу "вывести новости за N дней" или "вывести 3 новости опубликованные до конкретной даты и 3 после нее", то надо решать ее, а не тот бред, что ТС выдумал себе как один из компонентов пути решения этой задачи.

-~{}~ 18.01.09 12:57:

если ты еще не понял, почему то, что вы на пару с ТС пишите, это бред, то представьте что выйдет в момент перехода с летнего на зимнее время.
 

freemarket

Новичок
угу - взял с форума ....

так что есть у кого идеи как посчитать правильно количество дней отпираясь на календарь ?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
freemarket
есть идеи, что задача придумана и поставлена некорректно, как пишет dimagolov

или объясни задачу целиком, или отложи пиво в сторону и начинай думать
 

freemarket

Новичок
попробую сформулировать:
мне надо вывести новости и вместо даты
мне надо писать публикацию новости :
сегодня
вчера
позавчера
3дня назад
4 дня назад
5 .... и т.д.

вроде понятно всё .
 

dimagolov

Новичок
freemarket, ты гвозди тоже забиваешь микроскопом и взыхаешь, что получается не очень здорово?
 
Сверху