Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Преобразование даты
 
 автор: ШИМ   (16.02.2011 в 18:40)   письмо автору
 
 

Есть дата в формате - 2011-02-16 15:33:30

Как сделать чтобы эта дата выводилась в формате -

34 секунды назад
1 мин. 31 секунд назад
1 час 14 минут 32 сек. назад
1 день назад
неделю назад
месяц назад

  Ответить  
 
 автор: sim5   (16.02.2011 в 18:42)   письмо автору
 
   для: ШИМ   (16.02.2011 в 18:40)
 

Назад отчего?

  Ответить  
 
 автор: cheops   (16.02.2011 в 18:47)   письмо автору
 
   для: ШИМ   (16.02.2011 в 18:40)
 

Дата изначально не в MySQL находится? И допускается ли решение задачи средствами MySQL?

  Ответить  
 
 автор: Trianon   (16.02.2011 в 18:54)   письмо автору
 
   для: cheops   (16.02.2011 в 18:47)
 

А разве в MySQL есть похожие инструменты?

  Ответить  
 
 автор: ШИМ   (16.02.2011 в 18:58)   письмо автору
 
   для: Trianon   (16.02.2011 в 18:54)
 

Дата находится в mysql!
Назад от чего... Ну логично что от сейчас
Получение минут и секунд делаю вот так сейчас.. .а дальше что то голова уже не варит


$scandate = strtotime('2011-02-16 15:33:30');
$min = ceil((time() - $scandate)/60);
$sec = (time() - $scandate)%60;

  Ответить  
 
 автор: cheops   (16.02.2011 в 18:59)   письмо автору
 
   для: Trianon   (16.02.2011 в 18:54)
 

Часть инструментов есть, разницу в секундах, например, получить гораздо проще.

  Ответить  
 
 автор: Trianon   (16.02.2011 в 19:07)   письмо автору
 
   для: cheops   (16.02.2011 в 18:59)
 

Я знаю только DATEDIFF - разница в днях, и TIMEDIFF - разница в часах
Но это ж только пристрелка - остальные вычисления все равно руками, и очень запутанно, особенно если требуется исключить нетривиальные промахи, вроде того, чтобы разница между 01.01.2011 00:10 и 31.01.2011 23:20 определялась как строго меньше месяца, то есть в днях.
И при таких вычислениях величины, предвычисленные DATEDIFF и TIMEDIFF, помогут врядли.

  Ответить  
 
 автор: cheops   (16.02.2011 в 19:15)   письмо автору
 
   для: ШИМ   (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;
  }
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования