|
|
|
| Есть дата в формате - 2011-02-16 15:33:30
Как сделать чтобы эта дата выводилась в формате -
34 секунды назад
1 мин. 31 секунд назад
1 час 14 минут 32 сек. назад
1 день назад
неделю назад
месяц назад | |
|
|
|
|
|
|
|
для: ШИМ
(16.02.2011 в 18:40)
| | Назад отчего? | |
|
|
|
|
|
|
|
для: ШИМ
(16.02.2011 в 18:40)
| | Дата изначально не в MySQL находится? И допускается ли решение задачи средствами MySQL? | |
|
|
|
|
|
|
|
для: cheops
(16.02.2011 в 18:47)
| | А разве в MySQL есть похожие инструменты? | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2011 в 18:54)
| | Дата находится в mysql!
Назад от чего... Ну логично что от сейчас
Получение минут и секунд делаю вот так сейчас.. .а дальше что то голова уже не варит
$scandate = strtotime('2011-02-16 15:33:30');
$min = ceil((time() - $scandate)/60);
$sec = (time() - $scandate)%60;
|
| |
|
|
|
|
|
|
|
для: Trianon
(16.02.2011 в 18:54)
| | Часть инструментов есть, разницу в секундах, например, получить гораздо проще. | |
|
|
|
|
|
|
|
для: cheops
(16.02.2011 в 18:59)
| | Я знаю только DATEDIFF - разница в днях, и TIMEDIFF - разница в часах
Но это ж только пристрелка - остальные вычисления все равно руками, и очень запутанно, особенно если требуется исключить нетривиальные промахи, вроде того, чтобы разница между 01.01.2011 00:10 и 31.01.2011 23:20 определялась как строго меньше месяца, то есть в днях.
И при таких вычислениях величины, предвычисленные DATEDIFF и TIMEDIFF, помогут врядли. | |
|
|
|
|
|
|
|
для: ШИМ
(16.02.2011 в 18:40)
| | Можно начать отталкиваться от следующего скрипта
<?php
echo dateformat('2011-02-16 15:33:30');
// Разница от текущего времени в часах, минутах и секундах
function dateformat($date)
{
$scandate = strtotime($date);
$diff = time() - $scandate;
if(intval($diff/60) <= 0)
{
return declination($diff, "секунда", "секунды", "секунд");
} else if(intval($diff/3600) <= 0) {
$seconds = $diff % 60;
$minutes = intval($diff / 60);
return declination($minutes, "минута", "минуты", "минут")." ".
declination($seconds, "секунда", "секунды", "секунд");
} else if(intval($diff/3600/24) <= 0) {
$hours = intval($diff / 3600);
$diff = $diff - $hours * 3600;
$seconds = $diff % 60;
$minutes = intval($diff / 60);
return declination($minutes, "час", "часа", "часов")." ".
declination($minutes, "минута", "минуты", "минут")." ".
declination($seconds, "секунда", "секунды", "секунд");
}
}
// Склонение числа $num
function declination($num, $one, $ed, $mn, $notnumber = false)
{
// $one="статья";
// $ed="статьи";
// $mn="статей";
if($num === "") print "";
if(($num == "0") or (($num >= "5") and ($num <= "20")) or preg_match("|[056789]$|",$num))
if(!$notnumber)
return "$num $mn";
else
return $mn;
if(preg_match("|[1]$|",$num))
if(!$notnumber)
return "$num $one";
else
return $one;
if(preg_match("|[234]$|",$num))
if(!$notnumber)
return "$num $ed";
else
return $ed;
}
?>
|
| |
|
|
|