Могу поделиться классом интеллектуальной даты, как в счетчике у меня в подписи.
Формат даты dd.mm.yyyy без начальных нулей: 3.11.2010 - 3 ноября 2010 года.
Подключение класса и вызов функции:
Код:
$date = '3.11.2010';
setlocale(LC_ALL, 'ru_RU.CP1251');
$std = new FUNC;
$txt = trim(iconv('windows-1251', 'UTF-8', str_replace(" "," ",$std->bb_date_diff($date))));
Сам класс:
Код:
class FUNC {
function date_diff($begin, $end=0){
if(!$end)$end = time();
if( intval($end)<=intval($begin) )return array();
$s_diff = intval(date("s",$end)) - intval(date("s",$begin));
if($s_diff<0)
{
$s_diff += 60;
$end -= 60;
}
$i_diff = intval(date("i",$end)) - intval(date("i",$begin));
if($i_diff<0)
{
$i_diff += 60;
$end -= 3600;
}
$g_diff = intval(date("G",$end)) - intval(date("G",$begin));
if($g_diff<0)
{
$g_diff += 24;
$end -= 86400;
}
$y_diff = intval(date("Y",$end)) - intval(date("Y",$begin));
$m_diff = intval(date("m",$end)) - intval(date("m",$begin));
$dpm = 30;
if( stristr(",1,3,5,7,8,10,12,",",".date("Y",$end).",") )$dpm = 31;
if(date("m",$end) == "3")
{
if( intval(date("Y",$end))%4 )$dpm = 28;
else $dpm = 29;
}
$d_diff = intval(date("d",$end)) - intval(date("d",$begin));
while($d_diff<0)
{
$d_diff += $dpm;
$m_diff--;
}
while($m_diff<0)
{
$m_diff += 12;
$y_diff--;
}
$diff = array();
$str = " лет";
if($y_diff%10 == 1 and $y_diff!=11)$str = " год";
if( $y_diff%10>1 and $y_diff%10<5 and ( $y_diff<10 or $y_diff>20 ) )$str = " года";
if($y_diff)$diff['y'] = $y_diff.$str;
$str = " месяцев";
if($m_diff == 1)$str = " месяц";
if($m_diff>1 and $m_diff<5)$str = " месяца";
if($m_diff)$diff['m'] = $m_diff.$str;
$str = " дней";
if($d_diff%10 == "1" and $d_diff!=11)$str = " день";
if( $d_diff%10>1 and $d_diff%10<5 and ( $d_diff<10 or $d_diff>20 ) )$str = " дня";
if($d_diff)$diff['d'] = $d_diff.$str;
return $diff;
}
function bb_date_diff($date="") {
$dated = explode(".",$date);
foreach($dated as $k=>$v)
{
if(intval($v))$dated[$k] = intval($v);
else unset($dated[$k]);
}
if( count($dated) == 3 )
{
$dated = mktime(0, 0, 0, $dated[1], $dated[0], $dated[2]);
if($dated < time())
{
if( (time()-$dated)<86400 )return "первый день";
$dated = $this->date_diff($dated);
}
else
{
return " ";
}
return implode(", ",$dated);
}
else return " ";
}
}